while 循环增加额外的时间

while loop incrementing an extra time

下面的 while 循环运行额外的时间。我正在尝试执行一个用户输入,该输入接受来自用户的 10 个有效数字并打印它们的总和。但是,while 循环执行了额外的时间并请求第 11 个输入。

 import java.util.Scanner;
 class userInput{
 public static void main(String[] args) {
    
    int i = 1, sum = 0;
    Scanner sc = new Scanner(System.in);

    while(i <= 10){
    i++;
    
    System.out.println("Enter number " + "#" +i);
    boolean isValidNumber = sc.hasNextInt();

    if(isValidNumber){
        int userChoiceNumber = sc.nextInt();
        sum += userChoiceNumber;
    }else{
        System.out.println("Invalid Input");
    }
   }
   System.out.println("The sum of your entered numbers are = " + sum);

} }

除了那些很棒的评论之外,您可能应该只在获得有效输入时增加“i”:

while(i <= 10) {
  System.out.print("Enter number " + "#" +i + ": ");
  boolean isValidNumber = sc.hasNextInt();
  if(isValidNumber){
    int userChoiceNumber = sc.nextInt();
    sum += userChoiceNumber;
    i++;
  }else{
    System.out.println("Invalid Input");
    sc.next();
  }
}

请注意,当您输入错误时,您需要使用“sc.next()”将其删除。

首先 - 确保格式正确。 (我缩进了你的循环,将你的输出移到了主 class 中,修复了一些卷曲的 brackets/loop 结尾)。

public static void main(String[] args) {

    int i = 1, sum = 0;
    Scanner sc = new Scanner(System.in);

    while(i <= 10){
        i++;
    
        System.out.println("Enter number " + "#" +i);
        boolean isValidNumber = sc.hasNextInt();
    
        if(isValidNumber){
            int userChoiceNumber = sc.nextInt();
            sum += userChoiceNumber;
        }
        else{
            System.out.println("Invalid Input");
        }
    }

    System.out.println("The sum of your entered numbers are = " + sum);
}

好的 - 所以 运行 代码,我发现询问的次数是正确的,但是输入提示显示错误的数字,第一个输入提示从 2 开始,最后一个11 日

原因是 i++ 在请求输入之前运行,因此在输出之前它会累加。

这可以通过将 i++ 移动到 else 子句的正下方来轻松解决 - 如下所示:

        else{
            System.out.println("Invalid Input");
        }
        i++
    }

这里的主要问题是您在 while 循环开始时增加了变量。如果这就是你要找的东西,那很好,但是如果你想在它达到 10 时停止循环,你需要像 while(i < 10) 那样,如果 i++ 在循环的末尾循环,然后你可以做 while(i <= 10) 例如:

i = 0;
while(i < 10){
    i++;
    //code here
}

这将使使用 i 的代码使用 1 到 10 之间的值。使用 <= 将使用 1 到 11 之间的值。


另一个例子:
i = 0;
while(i < 10){
    //code here
    i++;
}

这将使使用 i 的代码使用 0 到 9 之间的值。使用 <= 将使用 0 到 10 之间的值。


人们执行增量循环的另一种方法是执行 for 循环而不是 while 循环 这看起来像:

for(int i = 0; i < 10; i++){
    //code here
}

这还允许您创建一个仅在循环内的变量,因此您可以在 for 循环内创建它,而不是在方法的开头或循环之前创建它。如果在别处使用变量,这就不好了。