2017-02-02 3 views
-2

Я новичок в программировании и хотел бы помочь.Как выполнить правильный цикл для викторины умножения

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

Когда пользователь не вводит никакой цикл, он остановится и отобразит, сколько правильных ответов из общего количества заданных вопросов.

любые идеи?

Вот мой код:

public static void main(String[] args) { 
    int correctCount = 0; // count the number correct question 
    int count = 0; // count the number of question 
    Scanner input = new Scanner(System.in); 

    // 2 random single-digit int 
    int number1 = (int) (Math.random() * 10); 
    int number2 = (int) (Math.random() * 10); 

    do { 
    // prompt the student to answer "what is number1 - number2 
    System.out.print("What is " + number1 + " * " + number2 + "?"); 
    int answer = input.nextInt(); 

    // grade the answer and display the result 
    if (number1 * number2 == answer) { 
     System.out.println("You are correct!"); 
     correctCount++; // increase the correct answer count 
    } else { 
     System.out.println("Your answer is worng. \n" + number1 + " * " 
       + number2 + " should be: " + (number1 * number2)); 
    } 

    count++; 

    System.out.println("\nWould you like more questions?"); 
    System.out.print(" Y or N ?"); 
    String option = input.nextLine(); 
} while (input.equals('y')); 
    System.out.println("\nYou've answered " + correctCount + " out of " 
     + count + " Correct"); 
} 

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

+0

Какая проблема возникает с текущим кодом? –

+0

'input.equals ('y')' должно, вероятно, быть чем-то вроде 'option.equalsIgnoreCase (" y ")' вместо этого. –

+0

@MickMnemonic using .equalsIgnoreCase ("y") помог, спасибо. –

ответ

2

Ваш сделай, пока условие цикла while(input.equals('y')), но input является Scanner объект, который не работает в этом цикле. Поскольку вы читаете по выбору пользователя, чтобы продолжить в option, оно должно быть while(option.equals("y")), или еще лучше, while(option.equalsIgnoreCase("y")), который позволит пользователю ввести y или Y

2

Основная проблема заключается в том, что вы проверяете, является ли значение input равным «y», которое оно не делает, поскольку входной сигнал является сканером, а не строкой.

Для выполнения этой работы необходимо внести несколько изменений.

Сначала вы хотите выбрать случайные числа внутри цикла do, иначе вы будете получать одинаковые числа снова и снова.

Во-вторых, вы хотите переместить объявление строки option, находящейся за пределами цикла, чтобы она была пригодной для использования.

В-третьих, вам нужно позвонить input.nextLine() после получения значения answer int, потому что метод nextInt() получает только int, оставив остальную часть строки.

В-четвертых, вы хотите использовать .trim() при получении следующей строки, чтобы удалить символы пробелов и символов новой строки.

Наконец, при проверке значения опции используйте .equalsIgnoreCase(), чтобы он работал для верхнего или нижнего регистра y.

 int correctCount = 0; // count the number correct question 
     int count = 0; // count the number of question 
     Scanner input = new Scanner(System.in); 



     String option; 

     do { 
      //2 random single-digit int 
      int number1 = (int)(Math.random() * 10); 
      int number2 = (int)(Math.random() * 10); 

      //prompt the student to answer "what is number1 - number2 
      System.out.print("What is " + number1 + " * " + number2 + "?"); 
      int answer = input.nextInt(); 
      input.nextLine(); 

      //grade the answer and display the result 
      if (number1 * number2 == answer) 
      { 
       System.out.println("You are correct!"); 
       correctCount++; //increase the correct answer count 

      } 
      else 
      { 
       System.out.println("Your answer is worng. \n" + 
      number1 + " * " + number2 + " should be: " + (number1 * number2)); 
      } 

      count++; 

      System.out.println("\nWould you like more questions?"); 
      System.out.print(" Y or N ?"); 

      option = input.nextLine().trim(); 
     } while (option.equalsIgnoreCase("Y")); 
+0

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

+0

Да, ты определенно на правильном пути всего пару мелочей – SeanKelleyx

0

Я не совсем уверен, что происходит не так с помощью сканера, но я обновил ваш класс, и теперь он работает нормально. Я переместил случайные числа в цикле, чтобы числа менялись для каждой итерации. Я также изменил условие while как «input.next(). EqualsIgnoreCase (« y »)». Когда он вводится .nextLine(). EqualsIgnoreCase («y») останавливается на одной итерации. Я не знаком с странностями класса Scanner и лично использовал бы Reader.

public class Main { 
    public static void main(String[] args) { 
     int correctCount = 0; // count the number correct question 
     int count = 0; // count the number of question 
     Scanner input = new Scanner(System.in); 

     do { 
      //2 random single-digit int 
      int number1 = (int) (Math.random() * 10); 
      int number2 = (int) (Math.random() * 10); 

      //prompt the student to answer "what is number1 - number2 
      System.out.print("What is " + number1 + " * " + number2 + "?"); 
      int answer = input.nextInt(); 

      //grade the answer and display the result 
      if (number1 * number2 == answer) { 
       System.out.println("You are correct!"); 
       correctCount++; //increase the correct answer count 

      } else { 
       System.out.println("Your answer is worng. \n" + 
         number1 + " * " + number2 + " should be: " + (number1 * number2)); 
      } 

      count++; 

      System.out.println("\nWould you like more questions?"); 
      System.out.print(" Y or N ?"); 
     } while (input.next().equalsIgnoreCase("y")); 


     System.out.println("\nYou've answered " + correctCount + " out of " + count 
       + " Correct"); 
    } 
} 
Смежные вопросы