当前位置: 首页 > 知识库问答 >
问题:

如何不为循环内的无效输入递增循环计数器

穆城
2023-03-14

我正在尝试编写一个简单的程序,它将使用Scanner进行输入并输出最低数字、最高数字以及它们的平均值。但我不希望数字低于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 ));

    }
}

共有3个答案

戚飞虎
2023-03-14

您可以将< code>if语句改为< code>while循环。

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;
}

这样,在有有效输入之前,您不会在<code>for循环

通骁
2023-03-14

考虑使用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);
蓬新
2023-03-14

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

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

 类似资料:
  • 我正在遍历一个LinkedHashMap并递增I counter,下面是我使用for循环的方式

  • 问题内容: 我对JMeter还是很陌生,我试图 使用循环控制器和JSR223 PostProcessor 来增加用户定义变量中预定义的计数器变量,但它似乎运行不佳。我查看了有关 JMeter循环的各种示例和计数器示例,以解决此问题,但配置元素Counter也未随循环增加。有人可以让我知道我做错了吗? 这就是我尝试使用后处理器递增计数器的方式,并且日志显示计数器未针对每个循环递增。我想将计数器提高到

  • 此方法重复读取命令并执行它们,直到游戏结束。完成的变量为true时,表示玩家/用户点击了退出并想要结束游戏——从而退出循环并执行到方法结束。 但我观察到循环有一种奇怪的行为。它循环得非常好(省略以下行时显示stopWatch.getTime()的连续计数: 但是当我把它们放回去时,它会停止显示秒表的连续递增时间,因为它会朝着时间限制增加(在这一点上,它应该停止)。即使玩家没有输入任何命令或输入。

  • 迭代器无效是如何处理的,而不是循环? 例如,这段代码不起作用,因为迭代器在插入后无效: 但是,如果我用这个for循环替换while循环,它会正确编译和运行: 为什么for循环有效而while循环无效?

  • 您好,我对jquery没有什么问题。首先,我有: 大众BORA 1.9TDI 1990 1995 奥迪A3 2.0TFSI 2006 2008 但我想实现: VW BORA 1.9TDI 1990 VW BORA 1.9TDI 1991 VW BORA 1.9TDI 1992 VW BORA 1.9TDI 1993 VW BORA 1.9TDI 1994 VW BORA 1.9TDI 1995 A

  • 问题内容: 在下面的示例代码中,是否真的需要counter = 0,还是有更好,更多的Python方法来访问循环计数器?我看到了一些与循环计数器有关的PEP,但它们要么被延迟要么被拒绝(PEP 212 和PEP 281)。 这是我的问题的简化示例。在我的实际应用程序中,这是通过图形完成的,整个菜单必须每帧重新绘制一次。但这以易于复制的简单文本方式进行了演示。 也许我还应该补充一点,我正在使用Pyt