我做了一个小的随机数学生成器,它给出了 2 个随机数和一个随机运算符,但是当我在“确定”按钮中调用检查结果方法时,我总是得到“Errado”(“错误”)字符串,这意味着它是没有正确地将文本字段的值与提出的任何数学问题的结果进行比较。将两个类的相关代码留在此处,并附上对我遇到问题的地方的注释和 2 以便于理解。感谢帮助!
public class geraAritmetica {
ArrayList<Integer> nums = new ArrayList();
int a;
char ops = '?';
int max = 10;
int min = 1;
int range = max - min + 1;
int res;
Random r = new Random();
public int gerarNums(){
for(int i = 0; i<10; i++){
a = (int) (Math.random()*range) + min;
nums.add(a);
}
return a;
}
public char gerarOps(){
switch(r.nextInt(4)){
case 1 : ops = '+';
res = nums.get(0) + nums.get(1);
break;
case 2: ops = '-';
res = nums.get(0) - nums.get(1);
break;
case 3: ops = '*';
res = nums.get(0) * nums.get(1);
break;
case 4: ops = '/';
res = nums.get(0) / nums.get(1);
break;
default: ops = '+';
res = nums.get(0) + nums.get(1);
break;
}
return ops;
}
public boolean checkRes(){ //everytime I call this method always get the same string "Errado" ("Wrong") in the label.
if(Integer.parseInt(FrameEnsinoAritmetica.jTextField1.getText()) == res){
FrameEnsinoAritmetica.jLabel2.setText("Correto!");
return true;
}
else FrameEnsinoAritmetica.jLabel2.setText("Errado!");
return false;
}
}
public class FrameEnsinoAritmetica extends javax.swing.JFrame {
geraAritmetica a = new geraAritmetica(); //creating object of class at the start of my JFrame class
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { //generating numbers and operator (it prints fine in another label)
int b = a.gerarNums();
int c = a.gerarNums();
char s = a.gerarOps();
jLabel1.setText(b + " " +s+ " " + c);
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
a.checkRes(); //everytime I call this method always get the same string "Errado" ("Wrong") in the label.
}
最佳答案
您似乎直接引用 FrameEnsinoAritmetica
类,而不是您在屏幕上看到的 FrameEnsinoAritmetica jFrame 的实际实例。例如,在另一个类中使用它不会引用您在屏幕上看到的框架:
String text = FrameEnsinoAritmetica.jTextField1.getText();
但是使用这个会起作用:
String text = yourInstanceOfEnsinoAritmetica.jTextField1.getText();
要解决此问题,我们可以将屏幕上显示的 FrameEnsinoAritmetica
的当前实例传递到 checkRes
方法中,这是通过修改 checkRes
来实现的code> 像这样,在方法中我们将 FrameEnsinoAritmetica
替换为 frame
以引用当前实例:
public boolean checkRes(FrameEnsinoAritmetica frame){ //everytime I call this method always get the same string "Errado" ("Wrong") in the label.
if(Integer.parseInt(frame.jTextField1.getText()) == res){
frame.jLabel2.setText("Correto!");
return true;
}
else frame.jLabel2.setText("Errado!");
return false;
}
然后我们只需更新 jButton1ActionPerformed
方法,将 this
(即 FrameEnsinoAritmetica
的当前实例)传递到更新后的 checkRes
方法:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
a.checkRes(this); //everytime I call this method always get the same string "Errado" ("Wrong") in the label.
}
关于java - 程序不将 JFrame 文本字段值与其他类中生成的数字进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72863075/