为什么while循环执行无限次?

Jam*_*mes 1 java do-while

我有一个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)

任何人都可以帮我弄清楚为什么这样做呢?

Lui*_*oza 6

因为你Exist = falsedo-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)