如何让我的程序在用户点击"y"时重新开始



所以我已经使用了System.out.print("Enter more test scores? (y/n): ");,当我运行它时,所有的分数都是总结的,用户没有机会再做一次,这是我的代码。你们会不会觉得我放错地方了?

public class TestScoreApp
{
    public static void main(String[] args) {
        // display operational messages
        System.out.println("Please enter the number of test scores to be entered");
        System.out.println("To end the program enter 999.");
        System.out.println();  // print a blank line


        int scoreTotal = 0;
        int scoreCount = 0;
        int testScore = 0;
        int min = 100;
        int max = 0;
        int counter = 0;
        int setNumber = 0;
        String userAnswer = "n";
        Scanner sc = new Scanner(System.in);

        // get a series of test scores from the user

        outerLoop:
        do {
            // user enters number of test scores to be entered
            System.out.print("Enter the number of test scores to be entered: ");
            setNumber = sc.nextInt();
            if (setNumber > 0 && setNumber != 999)
            {
                while (setNumber > 0)
                {
                // user enters test scores   
                System.out.print("Enter score: ");
                testScore = sc.nextInt();

                    // accumulate score count and score total

                    if (testScore <= 100)
                    {      
                        scoreCount += 1;
                        scoreTotal += testScore;
                        setNumber --;

                    } //Added for Exercise 2-2, #4 modified if statement
                    else if (testScore > 100 || testScore < 0) {
                        System.out.println("Invalid entry, score not counted");
                   } else if (testScore == 999) {
                        System.out.println("Average test score complete");
                    }

                    if (testScore > max && testScore <= 100) {
                        max = testScore;
                    }
                    if (testScore < min && testScore >= 0) {
                        min = testScore;
                    }
                    if (setNumber == counter)
                    {
                        break outerLoop;

                    }
                //End of test scores while loop
                }

                userAnswer = sc.next();

            }
            }// end of do loop
        while(userAnswer.compareTo("y") == 0 );
            System.out.print("Enter more test scores? (y/n): ");
       // display the score count, score total, and average score
        // Added casting from int ot double Exercise 3-2 #5
         double averageScore = (double) scoreTotal / (double) scoreCount;

         // Added number formatting ( 1 decimal place) 
        NumberFormat number = NumberFormat.getNumberInstance();
        number.setMaximumFractionDigits(1);

        String message = "n"
                + "Score count:   " + scoreCount + "n"
                + "Score total:   " + scoreTotal + "n"
                + "Average score: " + averageScore + "n"
                //Added for Exercise 3-2 #4 add min/max
                + "Max score: " + max + "n"
                + "Min score: " + min + "n";


        System.out.println(message);

    }      
}

我不知道你到底想做什么,如果你想问用户是否想在默认分数(用户设置在开始)之后添加更多分数,所以这就是答案:

import java.text.NumberFormat;
import java.util.Scanner;
public class TestScoreApp {
    public static void main(String[] args) {
        // display operational messages
        System.out.println("Please enter the number of test scores to be entered");
        System.out.println("To end the program enter 999.");
        System.out.println(); // print a blank line
        // declarations
        int scoreTotal = 0;
        int scoreCount = 0;
        int testScore = 0;
        int min = 100;
        int max = 0;
        int counter = 0;
        int setNumber = 0;
        String userAnswer = "n";
        Scanner sc = new Scanner(System.in);
        // get a series of test scores from the user
        // outerLoop:
        // do {
        // user enters number of test scores to be entered
        System.out.print("Enter the number of test scores to be entered: ");
        setNumber = sc.nextInt();
        if (setNumber > 0 && setNumber != 999) {
            do { // put the loop condition below
                // user enters test scores
                System.out.print("Enter score: ");
                testScore = sc.nextInt();
                // accumulate score count and score total
                if (testScore <= 100) {
                    scoreCount += 1;
                    scoreTotal += testScore;
                    setNumber--;
                } // Added for Exercise 2-2, #4 modified if statement
                else if (testScore > 100 || testScore < 0) {
                    System.out.println("Invalid entry, score not counted");
                } else if (testScore == 999) {
                    System.out.println("Average test score complete");
                }
                if (testScore > max && testScore <= 100) {
                    max = testScore;
                }
                if (testScore < min && testScore >= 0) {
                    min = testScore;
                }
                // if (setNumber == counter) {
                // break outerLoop;
                // }
                if (setNumber == counter) { // test if the counter reached zero
                    System.out.print("Enter more test scores? (y/n): "); // ask if the user want to add more
                    userAnswer = new Scanner(System.in).next(); // read the input
                    if (userAnswer.toCharArray()[0] == 'y') { // if yes, do
                        setNumber += 1;     // add +1 to setNumber, so user can add more one score
                    }
                }
            } while (setNumber > 0);
        }
        // display the score count, score total, and average score
        // Added casting from int ot double Exercise 3-2 #5
        double averageScore = (double) scoreTotal / (double) scoreCount;
        // Added number formatting ( 1 decimal place)
        NumberFormat number = NumberFormat.getNumberInstance();
        number.setMaximumFractionDigits(1);
        String message = "n" + "Score count:   " + scoreCount + "n"
                + "Score total:   " + scoreTotal + "n" + "Average score: "
                + averageScore + "n"
                // Added for Exercise 3-2 #4 add min/max
                + "Max score: " + max + "n" + "Min score: " + min + "n";
        System.out.println(message);
    }
}

程序中有几处需要修改。

  1. When you are asking user to enter the choice for inputting more, you should accept his/her choice in your userAnswer variable before closing off the do-while loop SO THAT THE USER CHOICE CAN BE CHECKED AFTER EACH ITERATION!

  2. There is no need to break the OUTER-LOOP without checking user's input!

  3. scoreCount & scoreTotal need to be initialised with 0 again in the beginning of the do-while loop.

更正后的程序以及所需的导入:-

import java.text.NumberFormat;
import java.util.Scanner;
public class JavaApplication7 {
public static void main(String[] args) {
System.out.println("Please enter the number of test scores to be entered");
System.out.println("To end the program enter 999.");
System.out.println();  // print a blank line
int scoreCount = 0,scoreTotal = 0;
int testScore = 0;
int min = 100;
int max = 0;
int counter = 0;
int setNumber = 0;
String userAnswer = "n";
Scanner sc = new Scanner(System.in);
// get a series of test scores from the user
do {
    // user enters number of test scores to be entered
    System.out.print("Enter the number of test scores to be entered: ");
    setNumber = sc.nextInt();
    if (setNumber > 0 && setNumber != 999)
    {
        scoreCount=0;
             scoreTotal=0;
        while (setNumber > 0)
        {
        // user enters test scores   
        System.out.print("Enter score: ");
        testScore = sc.nextInt();
            if (testScore <= 100)
            {      
                scoreCount += 1;
                scoreTotal += testScore;
                setNumber --;
            } //Added for Exercise 2-2, #4 modified if statement
            else if (testScore > 100 || testScore < 0) {
                System.out.println("Invalid entry, score not counted");
            } else if (testScore == 999) {
                System.out.println("Average test score complete");
            }
            if (testScore > max && testScore <= 100) {
                max = testScore;
            }
            if (testScore < min && testScore >= 0) {
                min = testScore;
            }
        }
       // display the score count, score total, and average score
// Added casting from int ot double Exercise 3-2 #5
 double averageScore = (double) scoreTotal / (double) scoreCount;
 // Added number formatting ( 1 decimal place) 
NumberFormat number = NumberFormat.getNumberInstance();
number.setMaximumFractionDigits(1);
String message = "n"
        + "Score count:   " + scoreCount + "n"
        + "Score total:   " + scoreTotal + "n"
        + "Average score: " + averageScore + "n"
        //Added for Exercise 3-2 #4 add min/max
        + "Max score: " + max + "n"
        + "Min score: " + min + "n";
System.out.println(message); 
    }
    System.out.print("Enter more test scores? (y/n): ");
    userAnswer=sc.next();     // Single Error----Only corrected piece of code.
    }while(userAnswer.compareTo("y") == 0 );    
// end of do loop
}  

}

您正在询问用户:

 System.out.print("Enter more test scores? (y/n): ");  

在退出while循环之后。这行不通。只要把这行正好放在

前面
userAnswer = sc.next();

相关内容