无法退出do while循环,即使表达式为false

时间:2019-03-17 08:10:03

标签: java

import java.util.*;
public class number_guassing_game{
    private static int a = 0;
    public static void main(String[] args) {
       Scanner in=new Scanner(System.in);
       int number=(int)(Math.random()*100+1);
       int count=0;
       boolean flag = true;
       do {
           int a = in.nextInt();
           count+=1;
           if(a>number) {
               System.out.println("smaller!");
           }else if(a<number) {
               System.out.println("bigger!");
           }
        }while(a != number); 
        System.out.println("congratulations!"+" You have guessed "+count+" times!");
    }
}

enter image description here

显然答案是48,但没有循环并打印表达式。

2 个答案:

答案 0 :(得分:7)

循环条件

while(a != number);

看不到将输入读取到的局部变量:

int a = in.nextInt();

它看到初始化为0的静态变量永远不变:

private static int a = 0;

因此循环永远不会终止。

您应该更改

int a = in.nextInt();

a = in.nextInt();

哦,a没有理由static。只要它在循环外(和循环之前)声明,它就可以是main方法的局部变量。

答案 1 :(得分:2)

您在循环内部定义的a从其外部遮盖了a。该a从未更新,因此,只有在您输入0(原始值a初始化时),循环才会终止。为了避免这种情况,只需使用相同的a而不是声明一个新变量:

a = in.nextInt(); // no datatype here, since you aren't defining a new variable