2017-09-29 21 views
0

我想在Java中编码,并开始进行基本的重复添加测验。限制重复添加测验 - 虽然循环 - Java

重复此外,直到输入正确的答案工作正常,但是,当我尝试将其限制在3项试验,它不会在第3停下来,而是如下图4个实验顺利,

import java.util.Scanner; 

public class RepeatAdditionQuiz { 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    int number1 = (int) (Math.random() * 10); 
    int number2 = (int) (Math.random() * 10); 

    Scanner input = new Scanner(System.in); 
    System.out.print("What is " + number1 + " + " + number2 + " : "); 
    int answer = input.nextInt(); 
    int count = 0; 
    while(count < 3) { 

     if (number1 + number2 != answer) { 
      System.out.print("Try again, What is " + number1 + " + " + number2 + " : "); 
      answer = input.nextInt(); 
     } 
     else 
      System.out.println("You're correct "); 

     count ++; 
    } 
    System.out.println("Your trails ended "); 

} 

} 

这是我的输出,

What is 1 + 2 : 8 
Try again, What is 1 + 2 : 6 
Try again, What is 1 + 2 : 9 
Try again, What is 1 + 2 : 9 
Your trails ended 

正如你可以看到我有四个足迹与第一个。当我试图在while循环(打印What is 1 + 2 :)之前删除第一个用户输入时,我在控制台中看不到任何东西。我怎样才能限制到3?

python我可以做这样的事情,

from random import randint 

number1 = randint(0,9) 
number2 = randint(0,9) 

answer = number1 + number2 
count = 0 
while count < 3: 
    print(number1, "+", number2) 
    user_answer = int(input("What is number1 + number2: ")) 
    if answer == user_answer: 
     print("yes, you're right") 
     break 
    else: 
     print("You're wrong, please enter again") 
    count +=1 
print("Sorry, all trials are done! ") 

而且我得到这样的输出,正好三个创新(我每次输入错误的答案),

8 + 5 
What is number1 + number2: 16 
You're wrong, please enter again 
8 + 5 
What is number1 + number2: 18 
You're wrong, please enter again 
8 + 5 
What is number1 + number2: 18 
You're wrong, please enter again 
Sorry, all trials are done! 

什么错误时我在java?有没有更好的方法在while循环中做?任何建议,将不胜感激。

+1

您已经指定了四个输入:一个在while循环之前,另一个在while循环中。如果你总共需要三个... – dave

+0

@dave是的,我总共需要三个,但正如问题中提到的那样,当我在while循环之前取消输入语句时,它不会打印任何内容。 –

回答

1

我更喜欢使用do-while循环在像这样的情况

import java.util.Scanner; 

public class RepeatAdditionQuiz { 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    int number1 = (int) (Math.random() * 10); 
    int number2 = (int) (Math.random() * 10); 

    Scanner input = new Scanner(System.in); 
    System.out.print("What is " + number1 + " + " + number2 + " : "); 
    int answer = input.nextInt(); 
    int count = 1; 
    do { 

     if (number1 + number2 != answer) { 
      System.out.print("Try again, What is " + number1 + " + " + number2 + " : "); 
      answer = input.nextInt(); 
     } else{ 
      System.out.println("You're correct "); 
      break; 
     } 
     count++; 
    } while (count < 3); 
    System.out.println("Your trails ended "); 

} 

} 

在此我初始化计数为1,因为我们已经提供了答案在实例化时的输入。

1

您可以将您的主要方法更改为如下所示。基本上它是你的代码,由Dave提供的改变和在其他块中的break语句。

希望这有助于

public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    int number1 = (int) (Math.random() * 10); 
    int number2 = (int) (Math.random() * 10); 

    Scanner input = new Scanner(System.in); 
    System.out.print("What is " + number1 + " + " + number2 + " : "); 
    int answer = input.nextInt(); 
    int count = 0; 
    while(count < 2) { 

     if (number1 + number2 != answer) { 
      System.out.print("Try again, What is " + number1 + " + " + number2 + " : "); 
      answer = input.nextInt(); 
     } 
     else{ 
      System.out.println("You're correct "); 
      break; 
     } 


     count ++; 
    } 
    System.out.println("Your trails ended "); 

} 
+0

是的,因为戴夫建议这是一种方法。然而,有什么办法,我可以说'count <3',并从'0'开始计数,就像我在'python'中显示的那样? –

0

要接近你的Python的例子,你可以尝试这样的事情

public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    int number1 = (int) (Math.random() * 10); 
    int number2 = (int) (Math.random() * 10); 

    Scanner input = new Scanner(System.in); 
    int answer = 0; 
    int count = 0; 
    while(count < 3) { 

     System.out.print("What is " + number1 + " + " + number2 + " : "); 
     answer = input.nextInt(); 

     if (number1 + number2 != answer) { 
     System.out.println("You're wrong, please enter again"); 

     } 
     else{ 
      System.out.println("You're correct "); 
      break; 
     } 


     count ++; 
    } 
    System.out.println("Your trails ended "); 

} 
1

与您的代码的问题是首先你问猜测答案,然后初始化计数为0

int answer = input.nextInt(); 
int count = 0; 

您已要求用户为第一线索,所以初始化数为1

int count = 1; 

解决这类问题的另一种方法是使用@Ayush Goyal提到的do-while。