Jak napisac aplet który losuje liczby, ilosc liczb -wpisujemy w pole tekstowe i ile ma wylosowac tez w polu tekstowym,potem nam wyswietla np. ciag 5 liczb wylosowanych sposród 100
Witam,
czy się różni
ilosc liczb -wpisujemy w pole tekstowe
od
ile ma wylosowac tez w polu tekstowym
?
tak:
w jednym polu tekstowym wpisujemy "ile liczb ma wylosować?"
w drugim polu wpisujemy liczbe :"sposród ilu liczb ma losować"
wciskamy button i ma wyswetlic nam liczby wylosowane
Za dobry jestem ;-) Ps tylko to nie jest aplet a aplikacja, żebyś nie miała za łatwo i coś musiał dodać od siebie :-D Aha ten przykład losuje bez powtórzeń.
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Arrays;
import java.util.Date;
import java.util.Random;
import java.util.Vector;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class TotekAplet extends JFrame {
public static final long serialVersionUID = 198327928L;
private JButton generuj;
private JTextField zIlu;
private JTextField ile;
private JLabel zIluLabel;
private JLabel ileLabel;
private JTextArea lista;
private JScrollPane scroll;
public TotekAplet() {
setTitle("Generator liczb losowych");
setSize(300, 350);
setResizable(false);
JMenuBar menuBar = new JMenuBar();
JMenu fileMenu = new JMenu("File");
JMenuItem fileExitMenuItem = new JMenuItem("Exit");
JMenuItem fileGenerujMenuItem = new JMenuItem("Generuj");
fileMenu.add(fileGenerujMenuItem);
fileMenu.add(fileExitMenuItem);
menuBar.add(fileMenu);
setJMenuBar(menuBar);
JPanel panel = new JPanel();
panel.setBorder(BorderFactory.createTitledBorder("Parametry"));
zIlu = new JTextField(2);
ile = new JTextField(2);
generuj = new JButton("Generuj");
zIluLabel = new JLabel(" Z ilu liczb wylosować");
ileLabel = new JLabel(" Ile liczb wylosować");
lista = new JTextArea("", 9, 23);
lista.setEditable(false);
lista.setLineWrap(true);
lista.setBackground(this.getBackground());
lista.setWrapStyleWord(true);
scroll = new JScrollPane(lista);
panel.setLayout(new GridLayout(3, 2));
panel.add(zIluLabel);
panel.add(zIlu);
panel.add(ileLabel);
panel.add(ile);
JPanel panel1 = new JPanel();
panel1.add(generuj);
JPanel panel2 = new JPanel();
panel2.add(scroll);
panel2.setBorder(BorderFactory.createTitledBorder("Wynik"));
fileGenerujMenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
generujLiczby();
}
});
fileExitMenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
System.exit(0);
}
});
generuj.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
generujLiczby();
}
});
getContentPane().setLayout(new BorderLayout());
getContentPane().add(panel, BorderLayout.NORTH);
getContentPane().add(panel1, BorderLayout.CENTER);
getContentPane().add(panel2, BorderLayout.SOUTH);
}
private void generujLiczby() {
try {
int zIlu = Integer.parseInt(this.zIlu.getText());
int ile = Integer.parseInt(this.ile.getText());
if (ile <= zIlu) {
Vector<String> liczby = generuj(zIlu, ile);
lista.setText("");
for (int i = 0; i < liczby.size(); i++) {
lista.append(liczby.get(i) + " ");
}
} else {
JOptionPane.showMessageDialog(this,
"Ile musi być mniejsze lub równe z ilu");
}
} catch (NumberFormatException e) {
JOptionPane.showMessageDialog(this, "Musisz podać liczby");
}
}
private Vector<String> generuj(int zIlu, int ile) {
Vector<String> v = new Vector<String>();
int[] tab = null;
if (ile <= zIlu) {
tab = new int[ile];
Random ran = new Random(new Date().getTime());
for (int i = 0; i < ile; i++) {
while (true) {
int buff = ((buff = ran.nextInt() % zIlu + 1) > 0) ? buff
: -buff;
boolean isExist = false;
for (int j = 0; j < ile; j++)
if (tab[j] == buff) {
isExist = true;
break;
}
if (!isExist) {
tab[i] = buff;
break;
}
}
}
Arrays.sort(tab);
for (int i = 0; i < ile; i++) {
v.add((String) Integer.toString(tab[i]));
}
}
return v;
}
public static void main(String[] args) {
new TotekAplet().setVisible(true);
}
}
hee, dzieki ci bardzo, aplikacje to juz napisałam, tylko nie wiem jak to zamienić na aplet:(mam juz 2 pola tekstowe ale nijak połaczyc to zeby dzialało
Prosto zamiast dziedziczyć po JFrame dziedziczysz po Applet, zamiast kostruktora używasz metody init() i nie używasz metody main :-) Aha i z tego co pamiętam to chyba menu w appletach nie można używać.
Przerobiłem masz:
import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;
import java.util.Date;
import java.util.Random;
import java.util.Vector;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class ApletTotek extends Applet {
public static final long serialVersionUID = 198327928L;
private JButton generuj;
private JTextField zIlu;
private JTextField ile;
private JLabel zIluLabel;
private JLabel ileLabel;
private JTextArea lista;
private JScrollPane scroll;
public void init() {
setSize(300, 350);
JPanel panel = new JPanel();
panel.setBorder(BorderFactory.createTitledBorder("Parametry"));
zIlu = new JTextField(2);
ile = new JTextField(2);
generuj = new JButton("Generuj");
zIluLabel = new JLabel(" Z ilu liczb wylosować");
ileLabel = new JLabel(" Ile liczb wylosować");
lista = new JTextArea("", 9, 23);
lista.setEditable(false);
lista.setLineWrap(true);
lista.setBackground(this.getBackground());
lista.setWrapStyleWord(true);
scroll = new JScrollPane(lista);
panel.setLayout(new GridLayout(3, 2));
panel.add(zIluLabel);
panel.add(zIlu);
panel.add(ileLabel);
panel.add(ile);
JPanel panel1 = new JPanel();
panel1.add(generuj);
JPanel panel2 = new JPanel();
panel2.add(scroll);
panel2.setBorder(BorderFactory.createTitledBorder("Wynik"));
generuj.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
generujLiczby();
}
});
setLayout(new BorderLayout());
add(panel, BorderLayout.NORTH);
add(panel1, BorderLayout.CENTER);
add(panel2, BorderLayout.SOUTH);
}
private void generujLiczby() {
try {
int zIlu = Integer.parseInt(this.zIlu.getText());
int ile = Integer.parseInt(this.ile.getText());
if (ile <= zIlu) {
Vector<String> liczby = generuj(zIlu, ile);
lista.setText("");
for (int i = 0; i < liczby.size(); i++) {
lista.append(liczby.get(i) + " ");
}
} else {
JOptionPane.showMessageDialog(this,
"Ile musi być mniejsze lub równe z ilu");
}
} catch (NumberFormatException e) {
JOptionPane.showMessageDialog(this, "Musisz podać liczby");
}
}
private Vector<String> generuj(int zIlu, int ile) {
Vector<String> v = new Vector<String>();
int[] tab = null;
if (ile <= zIlu) {
tab = new int[ile];
Random ran = new Random(new Date().getTime());
for (int i = 0; i < ile; i++) {
while (true) {
int buff = ((buff = ran.nextInt() % zIlu + 1) > 0) ? buff
: -buff;
boolean isExist = false;
for (int j = 0; j < ile; j++)
if (tab[j] == buff) {
isExist = true;
break;
}
if (!isExist) {
tab[i] = buff;
break;
}
}
}
Arrays.sort(tab);
for (int i = 0; i < ile; i++) {
v.add((String) Integer.toString(tab[i]));
}
}
return v;
}
public static void main(String[] args) {
new TotekAplet().setVisible(true);
}
}
a jak zczytac dane wprowadzone do pola tekstowego?
a jak zczytac dane wprowadzone do pola tekstowego?
pole.getText()
pozdrawiam
a jak taką tablice podpiac do tych pol tekstowych zeby wylosowało liczby po wcisnieciu przycisku??
/ wypełnij tablicę liczbami 1 2 3 . . . n
int[] liczby = new int[n];
for (int i = 0; i < liczby.length; i++)
liczby[i] = i + 1;
// wybierz k liczb i wstaw je do drugiej tablicy
int[] wynik = new int[k];
for (int i = 0; i < wynik.length; i++)
{
// wylosuj indeks z przedziału 0 i n - 1
int l = (int)(Math.random() * n);
// wybierz element z wylosowanym indeksem
wynik[i] = liczby[l];
// przesuń ostatni element pod wylosowany indeks
liczby[l] = liczby[n - 1];
n--;
}
???
nie za bardzo rozumiem....