我有一个while循环,应该读取数组的元素来尝试找到给定的值variable,但是,循环执行自己无限次,我不明白为什么.它应该在找到它正在寻找的值后退出; 我知道它确实找到它正在寻找的东西,因为它打印出I've found it!无限次.该方法的代码到目前为止是:
try{
System.out.println("Enter your card number to access your account:");
int CardNumber = sc.nextInt();
String CardNumberStr = Integer.toString(CardNumber);
boolean Exist = false;
String LineNo;
String [] CardNum = {};
int Counter;
FileReader fileReader = new FileReader("VirtualATM.txt");
BufferedReader bufferedReader = new BufferedReader(fileReader);
line = bufferedReader.readLine();
CardNum = line.split("\\s+");
do{
for(Counter = 0; Counter < CardNum.length; Counter++){
LineNo = CardNum[Counter];
if(LineNo.contains(CardNumberStr)){
Exist = true;
System.out.println("I've found it!");
}
else if(Counter == CardNum.length){
Exist=false;
}
}
}while(Exist = false || line != null);
bufferedReader.close();
}catch(FileNotFoundException e){
e.printStackTrace();
System.out.println(e.getMessage());
}catch(IOException e){
e.printStackTrace();
System.out.println(e.getMessage());
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮我弄清楚为什么这样做呢?
因为你Exist = false在do-while循环中分配.它应该是Exists == false或更好的方式!Exist:
} while(!Exist || line != null);
Run Code Online (Sandbox Code Playgroud)
除此之外,请遵循Java代码约定(旧的但仍然使用),其中变量应使用驼峰大小写声明,但以小写字母开头.
检查更多代码,你永远不会读取文件的另一行,你的逻辑do-while应该使用AND(&&),而不是OR(||).只需将其添加到您的代码中:
line = bufferedReader.readLine();
CardNum = line.split("\\s+");
do{
for(Counter = 0; Counter < CardNum.length; Counter++){
LineNo = CardNum[Counter];
if(LineNo.contains(CardNumberStr)){
Exist = true;
System.out.println("I've found it!");
}
else if(Counter == CardNum.length){
Exist=false;
}
}
//add this line to read another line of the file
//and check if it exists
line = bufferedReader.readLine();
} while(!Exist && line != null);
Run Code Online (Sandbox Code Playgroud)