2014-10-18 4 views
0

Im, чтобы сделать этот цикл после того, как он задал им вопрос в этом случае «« Что такое 2 + 2? », А затем введите туда, Затем программа должна спросить« Вы уверены, что Y/N », если они awnser no Я хочу, чтобы он вернулся к началу этого цикла и позволил им повторить вопрос. Поскольку я не могу заставить это зацикливаться, и после того, как эта часть работы, мне нужно будет сделать еще 9 вопросов в том же форматеLooping if statements


import java.util.Scanner; 
class Quiz 
{ 
    public static void main (String[] args) 
    { 
    int q1=0 , q2=0; 
    boolean correct = false; 
    char yn1='y'; 
    String q3 , q4; 
     Scanner input1 = new Scanner(System.in); 

     int count = 0 ; 
     //Question 1 start 
     while (correct == false) 
       { 
        System.out.println("What is 2+2? "); 
        System.out.println("Choices: 0,2,4,8"); 
        q1 = input1.nextInt(); //used after loop 


        System.out.println("Are You Sure? (y/n)"); 
        char c = input1.next().charAt(0);    // Changed LINE 
        if (c=='y')         // Changed LINE 
        { 
         if (q1 == 4) //q1 was stated during loop 
          System.out.println("You were correct 2+2 = 4"); 

         else 
          System.out.println("You were wrong"); 

         break;       
        } 
       } 
     //Question 2 start 
       while (correct == false) 
       { 
        System.out.println("how many legs does a legless cow have?"); 
        System.out.println("Choices: 0,25,4,31"); 
        q2 = input1.nextInt(); 


        System.out.println("Are You Sure? (y/n)"); 
        char c = input1.next().charAt(0);    
        if (c=='y')          
        { 
         if (q2 == 0) 
          System.out.println("You were correct, the cow has 0 legs"); 

         else 
          System.out.println("You were wrong"); 

        break;       
        } 
       } 

     //Question 3 start 
       while (correct == false) 
       { 
        System.out.println("What is the capital city of Canada?"); 
        System.out.println("Choices: Toronto, Montreal, Vancouver, Ottawa (capitals count)"); 
        q3 = input1.nextLine(); 


        System.out.println("Are You Sure? (y/n)"); 
        char c = input1.next().charAt(0);    
        if (c=='y')          
        { 
         if ("Ottawa".equals(q3)) 
          System.out.println("You were correct, The capital is Ottawa"); 

         else 
          System.out.println("You were wrong"); 

        break;       
        } 
       } 



    } 
    } 

новая проблема возникла я использовал один полезный пример и может попытаться изменить его в массив позже, но не до я получить основы работает. все вопросы usings Int работы до сих пор Т.е.

  //Question 1 start 
    while (correct == false) 
     { 
      System.out.println("What is 2+2? "); 
      System.out.println("Choices: 0,2,4,8"); 
      q1 = input1.nextInt(); //used after loop 


      System.out.println("Are You Sure? (y/n)"); 
      char c = input1.next().charAt(0);    // Changed LINE 
      if (c=='y')         // Changed LINE 
      { 
       if (q1 == 4) //q1 was stated during loop 
        System.out.println("You were correct 2+2 = 4"); 

       else 
        System.out.println("You were wrong"); 

       break;       
      } 
     } 

Но теперь я хочу использовать слово awnser так я сделал строку и поместить его в вместо междунар но теперь вместо того, чтобы позволить вход для q3 он пропускает на вход г/п не понимаю, почему все внезапно это сделало бы это, но другие вопросы будут корректно работать с int.

while (correct == false) 
       { 
        System.out.println("What is the capital city of Canada?"); 
        System.out.println("Choices: Toronto, Montreal, Vancouver, Ottawa (capitals count)"); 
        String q3 = input1.nextLine(); 


        System.out.println("Are You Sure? (y/n)"); 
        char c = input1.next().charAt(0);    
        if (c=='y')          
        { 
         if ("Ottawa".equals(q3)) 
          System.out.println("You were correct, The capital is Ottawa"); 

         else 
          System.out.println("You were wrong"); 

        break;       
        } 
       } 

Прошу прощения, если этого недостаточно, детали или неправильное оформление, и обязательно зафиксируйте его, если это так.

ответ

0

Я попытался скомпилировать program.But я получаю некоторые ошибки: -

error: variable q1 might not have been initialized 

Согласно тому, что я понял из ур question.Here это программа U хотите: -

import java.util.Scanner; 
class stack1 
{ 
    public static void main (String[] args) 
    { 
    int q1=0 , q2 , q3, q4, q5, q6 , q7 ,q8 ,q9 ,q10 , a ; 
    boolean correct = false; 
    char yn1='Y'; 

     Scanner input1 = new Scanner(System.in); 

     int count = 0 ; 
     while (correct == false) 
       { 
     System.out.println("What is 2+2? "); 
     System.out.println("Choices: 0,2,4,8"); 
     q1 = input1.nextInt(); //used after loop 


       System.out.println("Are You Sure? (Y/N)"); 
       char c = input1.next().charAt(0);    // Changed LINE 
       if (c=='y')         // Changed LINE 
       { 
     System.out.println("Exiting the program"); 
       correct = true; //It should now stop the loop and carry on 
        break;       
       } 


       } 


       if (q1 == 4) //q1 was stated during loop 
        System.out.println("You were correct 2+2 = 4"); 

       else 

        System.out.println("You were wrong"); 

       //Soon will add int score and add 1 each time its correct 
       // will be using 9 more loops the exact same way 



    } 
    } 

Я упомянул все измененные строки с комментарием «// измененная строка».

+0

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

+0

Я попытался использовать строку вместо int (я разместил ее как редактирование), и она пропускает для ввода/вывода какие-либо идеи для решения этой проблемы? –

+0

@ Куртис Спенс Спасибо, Кертис !. Я обязательно помогу в следующем посте. Но постарайтесь принять ответ, если ваш 1-й вопрос будет решен, так что он может быть полезен и для других. –

1

При чтении ввода всегда используйте q1 = Integer.parseInt(input1.nextLine()); (Еще лучше, используйте класс BufferedReader). Таким образом, ваше чтение будет работать гладко.

Во-вторых, вы можете разместить if (q1 == 4) в заявлении if (yn1.equals("Y")). Если пользователь набрал «Y», тогда установите correct = true;, чтобы перейти к следующему вопросу. Кроме того, если ответ пользователя правильный, то увеличивайте счетчик правильных ответов, иначе печатайте неправильно. Таким образом, цикл выглядит следующим образом:

while (correct == false) { 
     System.out.println("What is 2+2? "); 
     System.out.println("Choices: 0,2,4,8"); 
     q1 = Integer.parseInt(input1.nextLine()); 
     System.out.println("Are You Sure? (Y/N)"); 
     yn1 = input1.nextLine(); 
     if (yn1.equals("Y")) { 
      correct = true; 
      if (q1 == 4) { 
       System.out.println("You were correct 2+2 = 4"); 
       count++; 
      } else 
       System.out.println("You were wrong"); 
     } 
    } 

несколько вещей, чтобы искать в:

  • Вы печати "Choices: 0,2,4,8", но ничто не мешает пользователю ввести 3 или 3000. Необходим ли выбор? Затем вам нужно будет проверить, введен ли пользователь в этом диапазоне или нет.
  • Вместо копирования &, вставляя этот же цикл n раз, используйте массив. У вас есть все вопросы & ответы, хранящиеся в некотором массиве String. Что-то вроде этого:

    for (int i = 0; i < questions.length; i++) { 
        boolean nextQ = false; 
        while (nextQ == false) { 
         System.out.println(questions[i]); 
         String ans = input1.nextLine(); 
         System.out.println("Are You Sure? (Y/N)"); 
         yn = input1.nextLine(); 
         if (yn.equalsIgnoreCase("Y")) { 
          nextQ = true; 
          if (ans.equals(answers[i])) { 
           System.out.println("You were correct " + questions[i] 
             + " = " + answers[i]); 
           count++; 
          } else 
           System.out.println("You were wrong"); 
         } 
        } 
    } 
    

Я изменил булевой переменной correct для nextQ, чтобы избежать путаницы. Надейтесь, что вы в правильном направлении.

0

Это ответ на отредактированной вопрос: -

import java.util.Scanner; 
class stack2 
{ 
    public static void main (String[] args) 
    { 
    int q1=0 , q2 , q3, q4, q5, q6 , q7 ,q8 ,q9 ,q10 , a ; 
    boolean correct = false; 
    char yn1='Y'; 
    String s=""; 
System.out.println(s); 
     Scanner input1 = new Scanner(System.in); 

     int count = 0 ; 
     while (correct == false) 
       { 
     System.out.println("What is the capital city of Canada?"); 
     System.out.println("Choices: Toronto, Montreal, Vancouver, Ottawa (capitals count)"); 
     s = input1.nextLine(); 
     System.out.println(s); 
       System.out.println("Are You Sure? (Y/N)"); 
       char c = input1.next().charAt(0);    // Changed LINE 

     if (c=='y')         // Changed LINE 
       { 
     System.out.println("Exiting the program"); 
       correct = true; //It should now stop the loop and carry on 
        break;       
       } 
      if (s.equals("Ottawa")) //q1 was stated during loop 
        System.out.println("You were correct, The capital is Ottawa"); 

       else 

        System.out.println("You were wrong"); 

       } 




       //Soon will add int score and add 1 each time its correct 
       // will be using 9 more loops the exact same way 



    } 
} 

Будьте осторожны при входе в input.It Шоул точно «Оттава». Удачи

+0

Компилятор все еще для ome reason проскакивает к конечному вводу –