【问题标题】:How to make while loop to keep track of tries?如何制作while循环来跟踪尝试?
【发布时间】:2016-07-17 02:33:29
【问题描述】:

使用 switch 语句名称 GradeReport 编写一个程序,它读取 来自用户的等级并相应地打印 cmets。

说明:提示用户输入他们的等级用户必须得到提示 如果输入不是整数,则输入数字等级(0 到 100) 0到100之间,提示用户重新输入

如果不满足条件,则使用 do 循环重新输入成绩 或等级不在 0 到 100 之间,然后在屏幕上提示用户 如下(“错误:您必须输入一个介于 0 和 100 之间的整数”);”

还包含一个 while 循环来跟踪尝试。创建一个 变量名“tries”,将跟踪不超过 3 次的尝试 因此,如果输入不是 0 到 100 之间的整数,则提示 用户重新进入

我在搞清楚 while 循环以跟踪尝试时遇到问题。

这是我所拥有的:

import java.util.Scanner;

public class GradeReport {
 public static void main(String[] args) {

  int grade, category;

  Scanner scan = new Scanner(System.in);
  do {
   System.out.println("Enter a numeric grade (0 to 100): ");
   grade = scan.nextInt();
   if (grade >= 0 && grade <= 100)
    break;
   System.out.println("Error: You must re-enter an integer between 0 and 100");
  } while (true);

  int tries = 1;
  while (tries <= 3) {
   System.out.println("Tries: " + tries);
   tries++;

   category = grade / 10;

   System.out.print("That grade is ");
   switch (category) {
    case 10:
     System.out.println("a perfect score. Well done.");
     break;
    case 9:
     System.out.println("well above average. Excellent.");
     break;
    case 8:
     System.out.println("above average. Nice job.");
     break;
    case 7:
     System.out.println("average.");
     break;
    case 6:
     System.out.println("below average. You should see the");
     System.out.println("instructor to clarify the material " + "presented in class.");
     break;
    default:
     System.out.println("not passing.");
   }
  }
 }
}

【问题讨论】:

  • "我在弄清楚 while 循环以跟踪尝试时遇到了问题" 您能否解释/描述一下您的具体问题是什么?您尝试过什么,遇到什么困难?
  • 我想创建一个变量“tries”来跟踪不超过 3 的尝试,因此如果输入不是 0 到 100 之间的整数,提示用户重新输入。我有一个想法,但不完全是。
  • 对此投反对票,在我看来是错误的。这是一个明确的问题,不应该仅仅因为这对我们大多数人来说是一个非常简单的解决方案而被否决。请记住,我们在某些时候都是新人。

标签: java while-loop switch-statement do-while


【解决方案1】:

这是您尝试的部分:

do {
    System.out.println("Enter a numeric grade (0 to 100): ");
    grade=scan.nextInt();
    if(grade>=0 && grade<=100)
    break;
    System.out.println ("Error: You must re-enter an integer between 0 and 100");   
    }while(true);

这是你认为你计算尝试次数的部分:

    int tries = 1;
    while (tries <= 3) {
         System.out.println("Tries: " + tries);
         tries++;
         ...

You need to define `int tries = 0;` before trying, and integrate the incrementation inside the loop where you actually try. I'm sure you can figure out the rest yourself. You seem to be pretty close :)

编辑:由于其他人试图给你完整的答案(而且不是很好),我会这样做: 导入 java.util.Scanner;

public class GradeReport {
    public static void main(String[] args) {

        int grade, category;

        int tries = 0;

        Scanner scan = new Scanner(System.in);
        do {
            tries++;
            System.out.println("Enter a numeric grade (0 to 100): ");
            grade = scan.nextInt();
            if(grade >= 0 && grade <= 100){
                break;
            }
            System.out.println("attempt " + tries + " unsuccessful");
            if(tries >= 3){
                System.out.println("No more attempts.");
                break;
            }
            System.out.println("Error: You must re-enter an integer between 0 and 100");

        } while (true);

        if(grade >= 0 && grade <= 100){

            category = grade / 10;

            System.out.print("That grade is ");
            switch (category) {
            case 10:
                System.out.println("a perfect score. Well done.");
                break;
            case 9:
                System.out.println("well above average. Excellent.");
                break;
            case 8:
                System.out.println("above average. Nice job.");
                break;
            case 7:
                System.out.println("average.");
                break;
            case 6:
                System.out.println("below average. You should see the");
                System.out.println("instructor to clarify the material " + "presented in class.");
                break;
            default:
                System.out.println("not passing.");
            }
        }
    }
}

【讨论】:

  • 这有什么问题: int Trys = 1; while (tries
  • 你能展示一下它的其余部分是什么样子吗?也可以跟踪尝试吗?
  • “在尝试之前定义 int Trys = 0; 并将增量集成到您实际尝试的循环中”是什么意思。它的其余部分会是什么样子? @KjetilNordin
  • 您需要在开始尝试之前定义 int 尝试,对吧?然后你需要计算你所做的每一次尝试。您可以决定仅在尝试失败时计数,并在每次尝试后进行计数,但在我看来,最合乎逻辑的事情是说“开始尝试 nr 1”、“开始尝试 nr 2”等。这样,你会在实际尝试之前增加尝试次数,并计算尝试次数,而不是计算失败的尝试次数。您当然可以自己决定是否要使用基于 1 索引或 0 索引的计数器,但要知道您必须在退出子句之外递增。使用 0-index,您不需要休息。
【解决方案2】:

试试这个代码

int grade, category;

    Scanner scanner = new Scanner(System.in);
    int tries = 0;
    do{
        System.out.print("Enter a numeric grade (0 to 100): ");
        grade = scanner.nextInt();
        if(grade<0 || grade>100){
            System.out.println ("Error: You must re-enter an integer between 0 and 100");
        } else {
            break;
        }
        tries++;
    } while (tries < 3);
    System.out.print(grade);

在你有以下代码的地方

int grade, category;

        Scanner scan = new Scanner (System.in);
        do
        {
            System.out.println("Enter a numeric grade (0 to 100): ");
            grade=scan.nextInt();
            if(grade>=0 && grade<=100)
                break;
            System.out.println ("Error: You must re-enter an integer between 0 and 100");   
            }while(true);

        int tries = 1;
        while (tries <= 3) {
            System.out.println("Tries: " + tries);
            tries++;

【讨论】:

  • 也使用从 0 开始的索引,同时在中断后递增。将尝试++移动到do的第一行,你就会拥有它。
【解决方案3】:

您只需在循环输入之前设置tries 变量:

    Scanner scan = new Scanner (System.in);
    int tries = 0;
    do
    {
        System.out.println("Enter a numeric grade (0 to 100): ");
        grade=scan.nextInt();
        if(grade>=0 && grade<=100)
            break;
        tries += 1;
        System.out.println ("Error: You must re-enter an integer between 0 and 100");   
        }while(tries < 3);

    System.out.println("Tries: " + (tries + 1));

【讨论】:

  • 为什么要将尝试的索引更改为 0,如果要在休息后增加它?这没有意义。
  • @KjetilNordin:只是因为作为一个老程序员,我习惯从 0 开始计数......请注意,我稍后将其用作 tries + 1 以获得人类可理解的值。
  • 我也会从 0 开始,但我肯定会在循环的开头而不是结尾增加索引:) @SergeBallesta
猜你喜欢
  • 2020-01-19
  • 1970-01-01
  • 1970-01-01
  • 2021-11-09
  • 1970-01-01
  • 1970-01-01
  • 2016-08-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多