не может найти ошибку символа в состоянии цикла while - PullRequest
0 голосов
/ 16 февраля 2020

Я пишу программу для задания, которое должно давать случайные задачи, которые пользователь должен решить. Я пытаюсь это сделать, выбрав тип проблемы и ответив на один вопрос, и программа должна снова загрузить меню.

Первоначально я написал метод, который будет вызываться в операторе else в строке 147. Этот метод успешно зациклен, однако в присваивании специально запрашивается al oop, чтобы это произошло. Я пробовал несколько разных способов изменить условие условия цикла, но я не уверен, где я ошибся? любая помощь будет оценена. Я очень сильно хочу использовать оператор switch, но не могу, поскольку мы не узнали этого в классе.

    // Importing Scanner and Random class for later.
import java.util.Scanner;
import java.util.Random;

class AlgebraTutor {
// Solve for Y method.
    public static void solve_for_y() {
// Creation of a random number generator.
        Random number_gen = new Random();

// Generates random integers from -100 to 100.
        int var_m = number_gen.nextInt(101) - 100;
        int var_x = number_gen.nextInt(101) - 100;
        int var_b = number_gen.nextInt(101) - 100;

// Print problem out for student to see
        System.out.println("Problem: y = " + var_m + "(" + var_x +")" + "+" + var_b);

        System.out.println(" m =" + var_m);
        System.out.println(" x =" + var_x); 
        System.out.println(" b =" + var_b); 

// This formula will calculate the value of y.        
         float var_y = (var_m * var_x) + var_b;

// Using the scanners class a scanner object called userInput was created to record students answer. Answer was taken as a string and converted to an integer.

     Scanner user_input = new Scanner(System.in);
     System.out.println("Please solve for y:");
     String user_answer = user_input.nextLine();

        int answer = Integer.parseInt(user_answer);  

         if (answer == var_y){
             System.out.println("correct");

         }else{
                  System.out.println("incorrect, The answer is:" + var_y);

                 }
                                            }      
// -------------------------------------------------------------------------


// Solve for M method.
     public static void solve_for_m() {
// Creation of a random number generator.
        Random number_gen = new Random();

// Generates random integers from -100 to 100.
        int var_y = number_gen.nextInt(101) - 100;
        int var_x = number_gen.nextInt(101) - 100;
        int var_b = number_gen.nextInt(101) - 100;

// Print problem out for student to see.
        System.out.println("Problem: " + var_y + " = m (" + var_x +") + " + var_b);

        System.out.println(" y =" + var_y);
        System.out.println(" x =" + var_x); 
        System.out.println(" b =" + var_b); 

// This formula will calculate the value of m.        
        float var_m = (var_y - var_b) / var_x;

// Using the scanners class a scanner object called userInput was created to record students answer. Answer was taken as a string and converted to an integer.

     Scanner user_input = new Scanner(System.in);
     System.out.println("Please solve for m:");
     String user_answer = user_input.nextLine();

        int answer = Integer.parseInt(user_answer);  

         if (answer == var_m){
             System.out.println("correct");

         }else{
                  System.out.println("incorrect, The answer is:" + var_m);

                 }
                                            }      

// -------------------------------------------------------------------------     

// Solve for B method 

     public static void solve_for_b() {
// Creation of a random number generator.
        Random number_gen = new Random();

// Generates random integers from -100 to 100.
        int var_y = number_gen.nextInt(101) - 100;
        int var_x = number_gen.nextInt(101) - 100;
        int var_m = number_gen.nextInt(101) - 100;

// Print problem out for student to see.
        System.out.println("Problem: " + var_y + " = " + var_m + " (" + var_x +") " + "+ b");

        System.out.println(" y =" + var_y);
        System.out.println(" x =" + var_x); 
        System.out.println(" m =" + var_m); 

// This formula will calculate the value of m.        
        float var_b = var_y / (var_m * var_x);

// Using the scanners class a scanner object called userInput was created to record students answer. Answer was taken as a string and converted to an integer.

     Scanner user_input = new Scanner(System.in);
     System.out.println("Please solve for b:");
     String user_answer = user_input.nextLine();

        int answer = Integer.parseInt(user_answer);  

         if (answer == var_b){
             System.out.println("correct");

         }else{
                  System.out.println("incorrect, The answer is:" + var_b);
                                   }
                                            }          


// -------------------------------------------------------------------------     
    public static void main(String[] args) {

        do{
        System.out.println("Which type of problem would you like to practice?");
        System.out.println("1) Solve for y");
        System.out.println("2) Solve for m"); 
        System.out.println("3) Solve for b");
        System.out.println("4) To quit");

        Scanner selection_input = new Scanner(System.in);
        String user_selection = selection_input.nextLine();

        if ( user_selection.equals("1")){
            solve_for_y();
        } else if (user_selection.equals("2")){
            solve_for_m();
        } else if (user_selection.equals("3")){
            solve_for_b();
        } else if (user_selection.equals("4")){
            System.out.println("Quitting Program");
            System. exit(0);
        } else{
               System.out.println("Please choose from the given options");
        }

        } while(user_selection.equals("1") &&
                user_selection.equals("2") &&
                user_selection.equals("3") &&
                user_selection.equals("4"));

    }

                   }

1 Ответ

0 голосов
/ 16 февраля 2020

Вы должны объявить переменную user_inpout вне do...while l oop, затем вы можете проверить ее значение в выражении while(). Также вы должны инициализировать сканер только один раз в начале вашей программы.

    public static void main(String[] args)
    {

        Scanner selection_input = new Scanner(System.in);
        String user_selection=null;
        do
        {
            System.out.println("Which type of problem would you like to practice?");
            System.out.println("1) Solve for y");
            System.out.println("2) Solve for m");
            System.out.println("3) Solve for b");
            System.out.println("4) To quit");

            user_selection = selection_input.nextLine();

            if (user_selection.equals("1"))
            {
                solve_for_y();
            }
            else if (user_selection.equals("2"))
            {
                solve_for_m();
            }
            else if (user_selection.equals("3"))
            {
                solve_for_b();
            }
            else if (user_selection.equals("4"))
            {
                System.out.println("Quitting Program");
                System.exit(0);
            }
            else
            {
                System.out.println("Please choose from the given options");
            }

        }
        while (!user_selection.equals("4"));
    }

Для случая "4" у вас есть два:

            else if (user_selection.equals("4"))
            {
                System.out.println("Quitting Program");
                System.exit(0);
            }

и:

        while (!user_selection.equals("4"));

Необходим только один из обоих. Таким образом, вы можете удалить первый или заменить оператор while на while(true).

...