当用户点击“y”时如何让我的程序重新开始

时间:2014-06-01 18:09:14

标签: java loops system.out

所以我使用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);



    }      

}

3 个答案:

答案 0 :(得分:1)

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

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 :(得分:0)

您问的是用户:

 System.out.print("Enter more test scores? (y/n): ");  
退出while循环后

。这不会奏效。只需将此行准确放在:

之前
userAnswer = sc.next();

答案 2 :(得分:0)

该计划有几项修改。

  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.

  4. 更正后的计划以及所需的进口: -

    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
    }  
    

    }