无法识别“if”内的Java变量

无法识别“if”内的Java变量,java,if-statement,for-loop,Java,If Statement,For Loop,我有一个作业要为我的班级创建一个atm程序。除了这个问题,我几乎什么都做过。if语句中的变量无法识别。我想创建某种id检查,用于将变量赋值为true的代码无法识别,赋值为false的else语句工作正常。代码如下: boolean k; String trf = JOptionPane.showInputDialog("Insert [ID <space> Amount]:"); StringTokenizer tr = new StringTokenizer(trf); tid =

我有一个作业要为我的班级创建一个atm程序。除了这个问题,我几乎什么都做过。if语句中的变量无法识别。我想创建某种id检查,用于将变量赋值为true的代码无法识别,赋值为false的else语句工作正常。代码如下:

boolean k;
String trf = JOptionPane.showInputDialog("Insert [ID <space> Amount]:");
StringTokenizer tr = new StringTokenizer(trf);
tid = tr.nextToken();
int tam = Integer.parseInt(tr.nextToken());
for(int x=0;x<4;x++){
    if (t[x].account.getId().equals(tid)){
       k = true;
       //transfer code here[...]
       break;
    }
    else{
       k=false;
    }
    if(!k){
       JOptionPane.showMessageDialog(null, "ID not found");
    }
}
之前我读过一些类似的主题,其中一个主题说在if之前定义变量,但在我的例子中我不能这样做,因为我需要先检查值。提前感谢。

将最后一条if语句从for循环中转出


如果第一个if由于中断而计算为true,则最后一条语句的编写方式将不会执行。您可以执行以下操作:

boolean k = false;
String trf = JOptionPane.showInputDialog("Insert [ID <space> Amount]:");
StringTokenizer tr = new StringTokenizer(trf);
tid = tr.nextToken();
int tam = Integer.parseInt(tr.nextToken());
for(int x=0;x<4;x++){
    if (t[x].account.getId().equals(tid)){
       k = true;
       //transfer code here[...]
       break;
    }
}
if(!k){
   JOptionPane.showMessageDialog(null, "ID not found");
}

我认为您可能需要包括传输代码部分,以便使您的问题有意义。我不知道你的确切问题是什么。它不仅用于传输,也用于登录,所以这是通用代码。你得到的错误是什么?因为对我来说,它运行得很好:@Abhineet问题是将变量k定义为true的语句无法识别,所以它总是导致false。被接受的答案已经解决了这个问题。你说不被识别是什么意思?它说变量k可能没有被识别initialized@Dizz将k初始化为false以消除警告。然后你也可以删除if的else部分。如果你这样做,OP程序的逻辑就被破坏了。。。关于上述问题,更糟糕的是,在这种情况下,k初始化对于Java编译器来说就更不明显了。@ringøSorry,要不要去elabrate?实际上,我的程序现在运行正常。但是,如果你有一些改进我的程序的建议,我很乐意接受。@Dizz好吧,也许你的新程序的结果做了一些令人满意的事情,但这个问题中的算法逻辑没有反映出来,这与k有关,可能没有初始化,而不是它的逻辑。阅读这个问题时,在测试之前总是指定k,但是编译器没有深入到理解这一点。无论如何,你想要的是被接受的答案,它不仅修复了变量的初始化,而且还改变了逻辑,以修复另一个不属于初始问题的问题。它说如果我把最后一个if放在代码之外,变量k可能还没有初始化。我已经初始化了。布尔k=假;你检查过那一行了吗?你的变量看起来像局部变量,所以它不会被初始化为默认值。否则它将自动初始化为false。例如,如果我在main类中声明变量,我不需要将其初始化为false,对吗?您的解决方案是正确的,但它不能回答OP的代码段不起作用的原因。我只是好奇。
boolean k = false;
String trf = JOptionPane.showInputDialog("Insert [ID <space> Amount]:");
StringTokenizer tr = new StringTokenizer(trf);
tid = tr.nextToken();
int tam = Integer.parseInt(tr.nextToken());
for(int x=0;x<4;x++){
    if (t[x].account.getId().equals(tid)){
       k = true;
       //transfer code here[...]
       break;
    }
}
if(!k){
   JOptionPane.showMessageDialog(null, "ID not found");
}