2014-06-01 5 views
-1

Так что я использовал System.out.print("Enter more test scores? (y/n): ");, но когда я запустил его, и все оценки суммируют пользователя, ему не дают шанс сделать это снова здесь. мой код. Вы, ребята, думаете, что я, возможно, поставил его не в том месте.Как заставить мою программу начинать работу, когда пользователь нажимает «y» на

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



    }  

} 
+0

Я предполагаю, что вы хотите переместить 'System.out.print (« Введите больше тестов? (y/n): ");' просто ** выше **, где он говорит 'userAnswer = sc.next();', иначе ваш запрос ответа до того, как вы зададите вопрос. – user184994

ответ

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.

Скорректированная программа наряду с импортом необходимых: -

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 
} 

}

+0

@ Jat - проверьте, что я исправил для вас, он отлично работает в моей системе. Надеюсь, вы удовлетворены и, пожалуйста, одобрите, сделав аванс или принимая ответ !!! –

+0

Большое спасибо, это сработало! Ваша помощь приветствуется. – Jat

0

Вы спрашиваете пользователя:

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

после выхода из цикла. Это не сработает. Просто поставьте эту строку точно так же:

userAnswer = sc.next(); 
1

Я не знаю, что именно вы хотите сделать, если вы хотите спросить, если пользователь хочет добавить больше очков после оценки по умолчанию (что пользователь установлен на beggining), так это ответ:

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