我怎样才能让我的程序生成一个新的随机数?
How I can make my program generate a new random number?
所以我尝试关闭 window 然后重新打开它,这样整个程序就会从头开始。那没有用。重新验证框架 (f.revalidate(), f.repaint())..
我试过用 while 循环循环 if 函数,在猜到数字时将布尔值设置为 false。但这只会导致无限循环测试数字是否正确,因为循环会在单击按钮时激活。
import javax.swing.*;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.ActionEvent;
import java.util.Random;
public class Zahlenraten{
static int i = 0;
//static boolean w = true;
//static boolean s = true;
static int wert;
// static int Zahl1;
public static void main(String[] args) {
JFrame f = new JFrame("Zahlenraten");
f.setSize(500,500);
//f.setLayout(null);
JTextField t = new JTextField("");
t.setBounds(95,10,150,30);
f.addWindowFocusListener(new WindowAdapter() {
public void windowGainedFocus(WindowEvent e) {
t.requestFocusInWindow();
}
});
JButton e = new JButton("Exit");
e.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
e.setBounds(300, 100, 100, 30);
JLabel txt = new JLabel("Zahl eingeben:");
txt.setBounds(10,10,150,30);
Random r = new Random();
int Zahl = r.nextInt(100-0+1);
JButton b = new JButton("Prüfen");
f.getRootPane().setDefaultButton(b);//Enter Key = button b
b.addActionListener(evt -> {//statt evt könnte man natürlich auch actionPerformed... nehmen.
i++;
/* while(w) {*/
/* while(s) {*///Problem: wert wird endlos getestet, Möglichkeit: Fehler bei Eingabe von String trien und catchen aber wie ??
String str = t.getText();
wert = Integer.parseInt(str);
t.setText("");
if(wert > Zahl) {
System.out.println("Der gesuchte Wert ist kleiner.");
}
if(wert < Zahl) {
System.out.println("Der gesuchte Wert ist größer.");
}
if(wert == Zahl) {
System.out.println("Der gesuchte Wert wurde gefunden! Du hast "+i+" Versuche gebraucht.");
int dialogResult = JOptionPane.showConfirmDialog(null, "Wollen Sie eine neue Runde starten?", "Frage", JOptionPane.YES_NO_OPTION);
if (dialogResult == 0) {
}else {
//w = false;
System.exit(0);
}
//s = false;
}
// }
// }
});
b.setBounds(10,100,100,30);
JPanel p = new JPanel();
p.setLayout(null);
p.add(b);
p.add(e);
p.add(t);
p.add(txt);
f.add(p);
f.setVisible(true);
}
}
提前致谢!
一旦用户找到正确的数字,如果用户希望继续,您需要做的就是为您的随机数 (Zahl) 设置一个新值:
if (dialogResult == 0) {
Zahl.set(r.nextInt(100 - 0 + 1));
}
请注意,它位于 lambda 函数内,因此一个选项是将 int 变量切换为 AtomicInteger。这样你就可以更新了。
import java.util.concurrent.atomic.AtomicInteger;
import javax.swing.*;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.ActionEvent;
import java.util.Random;
public class Zahlenraten{
static int i = 0;
//static boolean w = true;
//static boolean s = true;
static int wert;
// static int Zahl1;
public static void main(String[] args) {
JFrame f = new JFrame("Zahlenraten");
f.setSize(500,500);
//f.setLayout(null);
JTextField t = new JTextField("");
t.setBounds(95,10,150,30);
f.addWindowFocusListener(new WindowAdapter() {
public void windowGainedFocus(WindowEvent e) {
t.requestFocusInWindow();
}
});
JButton e = new JButton("Exit");
e.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
e.setBounds(300, 100, 100, 30);
JLabel txt = new JLabel("Zahl eingeben:");
txt.setBounds(10,10,150,30);
Random r = new Random();
AtomicInteger Zahl = new AtomicInteger(r.nextInt(100 - 0 + 1));
JButton b = new JButton("Prüfen");
f.getRootPane().setDefaultButton(b);//Enter Key = button b
b.addActionListener(evt -> {//statt evt könnte man natürlich auch actionPerformed... nehmen.
i++;
/* while(w) {*/
/* while(s) {*///Problem: wert wird endlos getestet, Möglichkeit: Fehler bei Eingabe von String trien und catchen aber wie ??
String str = t.getText();
wert = Integer.parseInt(str);
t.setText("");
if(wert > Zahl.get()) {
System.out.println("Der gesuchte Wert ist kleiner.");
}
if(wert < Zahl.get()) {
System.out.println("Der gesuchte Wert ist größer.");
}
if(wert == Zahl.get()) {
System.out.println("Der gesuchte Wert wurde gefunden! Du hast "+i+" Versuche gebraucht.");
int dialogResult = JOptionPane.showConfirmDialog(null, "Wollen Sie eine neue Runde starten?", "Frage", JOptionPane.YES_NO_OPTION);
if (dialogResult == 0) {
Zahl.set(r.nextInt(100 - 0 + 1));
}else {
//w = false;
System.exit(0);
}
//s = false;
}
// }
// }
});
b.setBounds(10,100,100,30);
JPanel p = new JPanel();
p.setLayout(null);
p.add(b);
p.add(e);
p.add(t);
p.add(txt);
f.add(p);
f.setVisible(true);
}
}
所以我尝试关闭 window 然后重新打开它,这样整个程序就会从头开始。那没有用。重新验证框架 (f.revalidate(), f.repaint()).. 我试过用 while 循环循环 if 函数,在猜到数字时将布尔值设置为 false。但这只会导致无限循环测试数字是否正确,因为循环会在单击按钮时激活。
import javax.swing.*;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.ActionEvent;
import java.util.Random;
public class Zahlenraten{
static int i = 0;
//static boolean w = true;
//static boolean s = true;
static int wert;
// static int Zahl1;
public static void main(String[] args) {
JFrame f = new JFrame("Zahlenraten");
f.setSize(500,500);
//f.setLayout(null);
JTextField t = new JTextField("");
t.setBounds(95,10,150,30);
f.addWindowFocusListener(new WindowAdapter() {
public void windowGainedFocus(WindowEvent e) {
t.requestFocusInWindow();
}
});
JButton e = new JButton("Exit");
e.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
e.setBounds(300, 100, 100, 30);
JLabel txt = new JLabel("Zahl eingeben:");
txt.setBounds(10,10,150,30);
Random r = new Random();
int Zahl = r.nextInt(100-0+1);
JButton b = new JButton("Prüfen");
f.getRootPane().setDefaultButton(b);//Enter Key = button b
b.addActionListener(evt -> {//statt evt könnte man natürlich auch actionPerformed... nehmen.
i++;
/* while(w) {*/
/* while(s) {*///Problem: wert wird endlos getestet, Möglichkeit: Fehler bei Eingabe von String trien und catchen aber wie ??
String str = t.getText();
wert = Integer.parseInt(str);
t.setText("");
if(wert > Zahl) {
System.out.println("Der gesuchte Wert ist kleiner.");
}
if(wert < Zahl) {
System.out.println("Der gesuchte Wert ist größer.");
}
if(wert == Zahl) {
System.out.println("Der gesuchte Wert wurde gefunden! Du hast "+i+" Versuche gebraucht.");
int dialogResult = JOptionPane.showConfirmDialog(null, "Wollen Sie eine neue Runde starten?", "Frage", JOptionPane.YES_NO_OPTION);
if (dialogResult == 0) {
}else {
//w = false;
System.exit(0);
}
//s = false;
}
// }
// }
});
b.setBounds(10,100,100,30);
JPanel p = new JPanel();
p.setLayout(null);
p.add(b);
p.add(e);
p.add(t);
p.add(txt);
f.add(p);
f.setVisible(true);
}
}
提前致谢!
一旦用户找到正确的数字,如果用户希望继续,您需要做的就是为您的随机数 (Zahl) 设置一个新值:
if (dialogResult == 0) {
Zahl.set(r.nextInt(100 - 0 + 1));
}
请注意,它位于 lambda 函数内,因此一个选项是将 int 变量切换为 AtomicInteger。这样你就可以更新了。
import java.util.concurrent.atomic.AtomicInteger;
import javax.swing.*;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.ActionEvent;
import java.util.Random;
public class Zahlenraten{
static int i = 0;
//static boolean w = true;
//static boolean s = true;
static int wert;
// static int Zahl1;
public static void main(String[] args) {
JFrame f = new JFrame("Zahlenraten");
f.setSize(500,500);
//f.setLayout(null);
JTextField t = new JTextField("");
t.setBounds(95,10,150,30);
f.addWindowFocusListener(new WindowAdapter() {
public void windowGainedFocus(WindowEvent e) {
t.requestFocusInWindow();
}
});
JButton e = new JButton("Exit");
e.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
e.setBounds(300, 100, 100, 30);
JLabel txt = new JLabel("Zahl eingeben:");
txt.setBounds(10,10,150,30);
Random r = new Random();
AtomicInteger Zahl = new AtomicInteger(r.nextInt(100 - 0 + 1));
JButton b = new JButton("Prüfen");
f.getRootPane().setDefaultButton(b);//Enter Key = button b
b.addActionListener(evt -> {//statt evt könnte man natürlich auch actionPerformed... nehmen.
i++;
/* while(w) {*/
/* while(s) {*///Problem: wert wird endlos getestet, Möglichkeit: Fehler bei Eingabe von String trien und catchen aber wie ??
String str = t.getText();
wert = Integer.parseInt(str);
t.setText("");
if(wert > Zahl.get()) {
System.out.println("Der gesuchte Wert ist kleiner.");
}
if(wert < Zahl.get()) {
System.out.println("Der gesuchte Wert ist größer.");
}
if(wert == Zahl.get()) {
System.out.println("Der gesuchte Wert wurde gefunden! Du hast "+i+" Versuche gebraucht.");
int dialogResult = JOptionPane.showConfirmDialog(null, "Wollen Sie eine neue Runde starten?", "Frage", JOptionPane.YES_NO_OPTION);
if (dialogResult == 0) {
Zahl.set(r.nextInt(100 - 0 + 1));
}else {
//w = false;
System.exit(0);
}
//s = false;
}
// }
// }
});
b.setBounds(10,100,100,30);
JPanel p = new JPanel();
p.setLayout(null);
p.add(b);
p.add(e);
p.add(t);
p.add(txt);
f.add(p);
f.setVisible(true);
}
}