尝试计算使用 do-while 和 while 循环给出的输入的平均值,但它一直停止

Trying to calculate the average of inputs given using do-while and while loop but it keeps stopping

脚本的主要要点是不断询问成绩,直到用户输入负数。输入负数后,它会计算这些成绩的平均值。用户输入的成绩只能是4-10。

我已经花了好几个小时试图解决这个问题。如果我只输入无效输入或只输入有效输入,它工作正常,但第二次我尝试将其混合时,脚本停止。

例如:如果我输入 4(有效输入),脚本会要求另一个成绩。如果我输入 3(无效输入),脚本会说输入无效并要求另一个有效输入。在那之后,如果我再次输入 4 它就会停止工作,当它应该一直这样下去直到我输入一个负数以使其开始计算有效输入的平均值。

import java.util.Scanner;

public class Average {

public static void main(String[] args){

    Scanner scanner = new Scanner(System.in);

System.out.println("The program will calculate the average of the user inputted grades.");
System.out.println("The program will start calculating with any negative integer");

double grade;   
double sum = 0;
int count = 0;



do {
    System.out.print("Input grade (4-10): ");
    grade = scanner.nextDouble();

    if (grade >= 4 && grade <= 10){
        sum = sum + grade;
        count++; 
    }



} while (grade >= 4 && grade <= 10);

 {


while (grade >= 0 && grade < 4 || grade > 10){

    System.out.println("Invalid grade!");
    System.out.print("Input grade (4-10): ");
    grade = scanner.nextDouble();


    if (grade < 0){

        System.out.println(count + " grades were given.");
        System.out.println("Average: " + sum/count);
        break;
    }
  }
 }
} 

它不起作用,因为你的循环是分开的,所以如果 first 为 false,second 只工作一次然后停止。尝试这样的事情:

import java.util.Scanner;

public class Average {

    public static void main(String[] args){

        Scanner scanner = new Scanner(System.in);

        System.out.println("The program will calculate the average of the user inputted grades.");
        System.out.println("The program will start calculating with any negative integer");

        double sum = 0;
        int count = 0;
        double grade;

        do{
            System.out.print("Input grade (4-10): ");
            grade = scanner.nextDouble();

            if(grade >= 4 && grade <= 10){
                    sum = sum + grade;
                    count++;
            }else{
                System.out.println("Invalid grade!");
            }
        }while(grade >= 0);

        System.out.println(count + " grades were given.");
        System.out.println("Average: " + sum/count);


    }
}

第一个while循环仅针对有效输入,第二个循环仅针对无效输入,换句话说,如果您输入3和5,则它已经在两个循环之外。

试试这个

while(true) {
    System.out.print("Input grade (4-10): ");
    grade = scanner.nextDouble();
    if(grade < 0){
        System.out.println(count + " grades were given.");
        System.out.println("Average: " + sum / count);
        break;
    }
    if(grade >= 4 && grade <= 10){
        sum = sum + grade;
        count++;
    } else {
        System.out.println("Invalid grade!");
    }
}

尽量避免嵌入 whiles/do-whiles - 正如您遇到的那样,它们很难阅读,因此很难弄清楚发生了什么。使用单个 while 循环可以更轻松地实现您想要实现的目标:

System.out.print("Input grade (4-10): ");
grade = scanner.nextDouble();

while (grade >= 0)
{
    if (grade < 4 || grade > 10)
    {
        System.out.println("Invalid grade!");
    }
    else
    {
        sum = sum + grade;
        count++;
    }

    System.out.print("Input grade (4-10): ");
    grade = scanner.nextDouble();
}