我正在使用Java而我的while语句不起作用

时间:2013-11-19 11:59:59

标签: java do-while

如果输入的值不正确,则会提示您输入正确的金额,但在输入正确或错误的金额后,它只会结束程序。对不起,我之前应该提到该程序会持续12个月。我的问题是,在我输入错误的金额后,一旦我被提示输入适当数量的任何一个月,该程序将接受我的答案并结束,而不是采取正确的答案并继续下个月。

    System.out.print("Please enter monthly kWh usage for month 1: ");
    month1 = scan.nextInt();
    do {
          System.out.print(" Please enter a valid amount: ");
          month1 = scan.nextInt();
    } while (month1>10000 || month1<0);

    System.out.print("Please enter monthly kWh usage for month 2: ");
    month2 = scan.nextInt();
    do {
        System.out.print(" Please enter a valid amount: ");
        month2 = scan.nextInt(); 
    } while (month2>10000 || month2<0);   

4 个答案:

答案 0 :(得分:3)

您的代码完全正确“只是结束程序”因为 没有其他代码行可以执行!

第一个执行循环将接受输入并将其存储在变量month1中,然后检查它是否在010000之间。如果是这样,它将退出循环,否则它会一次又一次地运行循环,直到您输入010000之间的值。然后第二个循环将对month2变量执行相同的操作。

存储两个变量后,程序将退出而不执行任何,因为没有要执行的代码行。在此之后,您需要编写一些代码行来执行某些操作。


P.S。此外,最好将nextInt() try-catch 块包围起来,因为输入非数字值会导致程序崩溃。

<小时/> 修改

此外,您需要移除month1 = scan.nextInt();month2 = scan.nextInt();行,因为 do-while 循环首次负责初始化变量。

答案 1 :(得分:2)

也许这样的事情就是你想要的。 do正在弄乱你,因为如果第一个输入满足你的条件,循环仍然至少会发生一次。只需使用while循环

System.out.print("Please enter monthly kWh usage for month 1: ");
month1 = scan.nextInt();

while (month1 > 10000 || month1 < 0) {
    System.out.print(" Please enter a valid amount: ");
    month1 = scan.nextInt();
}

System.out.print("Please enter monthly kWh usage for month 2: ");
month2 = scan.nextInt();

while (month2 > 10000 || month2 < 0) {
    System.out.print(" Please enter a valid amount: ");
    month2 = scan.nextInt();
}

编辑:运行代码

import java.util.Scanner;

public class Month {

public static void main(String[] args) {
    int month1;
    int month2;
    Scanner scan = new Scanner(System.in);
    System.out.print("Please enter monthly kWh usage for month 1: ");
month1 = scan.nextInt();

while (month1 > 10000 || month1 < 0) {
    System.out.print(" Please enter a valid amount: ");
    month1 = scan.nextInt();
}

System.out.print("Please enter monthly kWh usage for month 2: ");
month2 = scan.nextInt();

while (month2 > 10000 || month2 < 0) {
    System.out.print(" Please enter a valid amount: ");
    month2 = scan.nextInt();
}
}
}

答案 2 :(得分:0)

如果下一个字符不是整数,则

nextint()将抛出异常:

InputMismatchException - if the next token does not match the Integer regular expression, or is out of range 

尝试使用例外块:

try {
  ...
}
catch( InputMismatchException e ) {
    System.out.println( e.getMessage() );
    e.printStackTrace();
}

答案 3 :(得分:0)

首先,你何时使用do..while,你不需要捕获循环外的输入。这会强制您输入两次输入,可以删除多余的语句。

其次,你有没有任何声明要在第二次执行后执行...时间?

我建议你提供更多细节,你想在这里实现什么目标?