【问题标题】:How to not incrementing loop counter for invalid input within the loop如何不为循环内的无效输入增加循环计数器
【发布时间】:2014-08-25 01:35:04
【问题描述】:

我正在尝试编写一个简单的程序,该程序将使用扫描仪获取输入并输出最小数字、最大数字以及它们的平均值。但我不想要小于 0 或大于 100 的数字。我有程序输出最小值、最大值和平均值,它会告诉我输入的数字是小于 0 还是大于 100,但它仍然将其视为 for 循环中的“轮换”。我基本上希望程序在输入错误数字时返回到前一个数字,而不是在 for 循环中继续前进。有什么建议? 谢谢!

import java.text.DecimalFormat;
import java.util.Scanner;
public class ExamGrades {

public static void main(String[]args){

    Scanner scan = new Scanner(System.in );

        int number = 0;
        double total = 0;
        int minimum;
        int maximum = 0;

        System.out.println("Please enter the first integer: ");

        number = scan.nextInt();
        minimum=number;
        total += number;

        for(int i = 2; i<11; i++){

            if(number<0 || number >100){
                System.out.println("Please enter a valid number: ");
                number = scan.nextInt();
            }
            else{
                System.out.println("Please enter integer " + i + ":");
                number = scan.nextInt();
                total += number;

            if(number<minimum)
                minimum = number;
            if(number>maximum)
                maximum = number;
            }
        }

        DecimalFormat oneDecimalPlace = new DecimalFormat("##.#");
        System.out.println("The minimum is: " + minimum);
        System.out.println("The maximum is: " + maximum);
        System.out.println("The average is: " + oneDecimalPlace.format((total) / 10.0 ));

    }
}

【问题讨论】:

    标签: java for-loop


    【解决方案1】:

    您可以从 for 循环内部递减循环计数器(变量 i);这可能不是最佳做法,但它可以完成工作。

    或者,您可以使用 while 循环(例如 while (i

    【讨论】:

      【解决方案2】:

      考虑使用while() 而不是for()

      int i = 1;
      while(i <= 10){
          if(number < 0 || number > 10) {
              // Code goes here
          } else {
              // More code goes here
              i++; // Notice that i only increments here
          }
      }
      

      其他选项是do... while() 循环,这可以帮助您避免重复代码:

      int i = 1;
      do {
          if(i == 1)
              System.out.print("\nEnter first number:\t");
          else
              System.out.print("\nEnter next number: \t");
          number = scan.nextInt();
          if(number < 0 || number > 10) {
              // Code goes here
          } else {
              // More code goes here
              i++; // Again, i only increments here
          }
      } while(i < 10);
      

      【讨论】:

        【解决方案3】:

        您可以将if 语句更改为while loop

        for(int i = 2; i < 11; i++){
            System.out.println("Please enter integer " + i + ":");
            number = scan.nextInt();
        
            while(number < 0 || number > 100){ // Wait for valid input
                System.out.println("Please enter a valid number: ");
                number = scan.nextInt();
            }
        
            total += number;
            if(number < minimum) minimum = number;
            if(number > maximum) maximum = number;
        }
        

        这样,在有有效输入之前,您不会在 for loop 中进行另一次迭代。

        【讨论】:

          【解决方案4】:

          把它写成一个while循环

          import java.text.DecimalFormat;
          
          import java.util.Scanner;
          
          public class ExamGrades {
          
          public static void main(String[]args){
          
              Scanner scan = new Scanner(System.in );
          
              int number = 0;
              double total = 0;
              int minimum;
              int maximum = 0;
              int I = 2;
              System.out.println("Please enter the first integer: ");
          
              number = scan.nextInt();
              minimum=number;
              total += number;
          
              while (I < 11){
          
                  if(number<0 || number >100){
                      System.out.println("Please enter a valid number: ");
                      number = scan.nextInt();
                  }
                  else{
                      System.out.println("Please enter integer " + i + ":");
                      number = scan.nextInt();
                      total += number;
          
                      if(number<minimum)
                          minimum = number;
                      if(number>maximum)
                          maximum = number;
                      I++;
                      }
                  }
          
                  DecimalFormat oneDecimalPlace = new DecimalFormat("##.#");
                  System.out.println("The minimum is: " + minimum);
                  System.out.println("The maximum is: " + maximum);
                  System.out.println("The average is: " + oneDecimalPlace.format((total) / 10.0 ));
          
              }
          }
          

          【讨论】:

          • 谢谢!我只是在 if 语句中减少了 i 。如果您不介意,还有一个问题;当我输入小于 0 或大于 100 的数字时,它会将其保存为最小值/最大值。我不想将小于 0 或大于 100 的数字保存为最小值/最大值。我将如何解决它,以便它只保存中间的数字?
          猜你喜欢
          • 2017-06-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-11-26
          • 2019-04-28
          • 2018-06-11
          相关资源
          最近更新 更多