程序不是比较JFrame文本字段值生成的其他类



我做了一个小的随机数学生成器,它给出了2个随机数和一个随机运算符,但当我在ok按钮中调用检查结果方法时,我总是得到"Errado"("Wrong")字符串,这意味着它没有正确地将文本字段的值与所呈现的任何数学问题的结果进行比较。在这里留下两个类的相关代码,并对我遇到的问题和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类,而不是您在屏幕上看到的frameensinaritmetica jFrame的实际实例。例如,在另一个类中使用this将不会引用您在屏幕上看到的框架:

String text = FrameEnsinoAritmetica.jTextField1.getText();

但是使用这个也可以:

String text = yourInstanceOfEnsinoAritmetica.jTextField1.getText();

为了解决这个问题,我们可以将屏幕上显示的FrameEnsinoAritmetica的当前实例传递到checkRes方法中,我们通过这样修改checkRes来做到这一点,并且在方法中我们将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.          
} 

修复第2部分(对于未正确计算的res)


public class FrameEnsinoAritmetica extends javax.swing.JFrame {
geraAritmetica a = new geraAritmetica();
public static int b;
public static int c;
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
b = a.gerarNums();
c = a.gerarNums();
char s = a.gerarOps(this);

jLabel1.setText(b + " " +s+ " " + c + " ");
}  

public class geraAritmetica {
ArrayList<Integer> nums = new ArrayList();
int a;
char ops = '?';
int max = 10;
int min = 1;
int range = max - min + 1;
public static 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(FrameEnsinoAritmetica frame){
switch(r.nextInt(4)){
case 1 : ops = '+';
res = frame.b + frame.c; //checking both variables directly from JFrame class instead of getting through index from ArrayList.
break;
case 2: ops = '-';
res = res = frame.b - frame.c;
break;
case 3: ops = '*';
res = frame.b * frame.c;
break;
case 4: ops = '/';
res = frame.b / frame.c;
break;    

default: ops = '+';
res = frame.b + frame.c;
break;
}
return ops;
}

public boolean checkRes(FrameEnsinoAritmetica frame){
if(Integer.parseInt(frame.jTextField1.getText()) == res){
frame.jLabel2.setText("Correto!");
return true;
}
else frame.jLabel2.setText("Errado!");
return false;
}

}

最新更新