做无限循环

时间:2015-12-03 11:55:02

标签: loops while-loop integer

我试图做一个简单的方法来询问一个数字,但我遇到了这个问题的麻烦,这是我的代码:

private static int rows(){
    int w = 0;
    Scanner sc = new Scanner(System.in);
    do {
    System.out.println("What is the number of rows?");
    if(sc.hasNextInt()) {
        w = sc.nextInt();
        if (w <= 0){
            System.out.println("Error: the rows can't be 0 or negative number.");
        }
    }
    else { 
        System.out.println("Error: please only use digits.");
    }
    }
    while (w<=0);
    return w;
}

所以,当我引入一个负数或零时,代码工作正常,但如果我尝试引入一个字母或一个无效字符,如点或逗号,程序进入一个无限循环重复此:

   System.out.println("What is the number of rows?");
   System.out.println("Error: please only use digits.");     

2 个答案:

答案 0 :(得分:0)

w仅在sc.hasNextInt()的情况下发生变化。如果输入字母/无效字符,w永远不会被更改,并且您的循环无法结束。

答案 1 :(得分:0)

您没有刷新w的价值。重新启用该用户为w输入新值。类似的东西:

int w = 0;
Scanner sc = new Scanner(System.in);
do {
    System.out.println("What is the number of rows?");
    if(sc.hasNextInt()) {
        w = sc.nextInt();
        if (w <= 0){
            System.out.println("Error: the rows can't be 0 or negative number.");
        }
    }
    else { 
        System.out.println("Error: please only use digits.");
        sc.next(); // Clear default input on invalid input
        continue; // Restart the loop so it gets newer value again
    }
}
    while (w<=0);
    return w;