2016-08-18 84 views
-2

我正在尝试制作一个类似家庭世仇的游戏,其中用户被问到一个问题,他们必须回复3次,所以我想知道是否有像我可以使用的goto之类的东西。如何在Java中执行goto?

Question question = questions.get(new Random().nextInt(questions.size())); 
System.out.println(question.getQuestion()); 
Scanner scanner = new Scanner(System.in); 

//want to put start right here but can't 
//start: 

String answer = scanner.nextLine(); 

for (Answer a : question.getAnswers()) 
{ 
    if (a.getAnswer().toLowerCase().contains(answer)) 
    { 
     System.out.println(a.getAnswer() + " " + a.getPoints()); 
     return; 
     //Make it go back to start right here 
    } 
} 

System.out.println("WRONG!"); 
//also make it go back to start right here 
+0

为什么不只是运行一个循环3次并退出循环,如果有错误的答案? –

+1

您正在寻找带标签的'继续'。 https://docs.oracle.com/javase/tutorial/java/nutsandbolts/branch.html –

+0

如果问题是“我该如何做一个转到?”,那么你可能做错了...... – John3136

回答

1

你这得太多,一个for循环是所有你需要:

Question question = questions.get(new Random().nextInt(questions.size())); 

System.out.println(question.getQuestion()); 

Scanner scanner = new Scanner(System.in); 

for (int i = 0; i < 3; i++) { 
    String answer = scanner.nextLine(); 

    boolean correct = false; 
    for (Answer a : question.getAnswers()) { 
     if (a.getAnswer().toLowerCase().contains(answer)) { 
      System.out.println(a.getAnswer() + " " + a.getPoints()); 
      correct = true; 
      break; 
     } 
    } 
    if (!correct) { 
     System.out.println("WRONG!"); 
    } 
} 

goto任何语言是坏实践,因为它使得难以遵循代码。实际上总是有一种更好的方式来完成你想要的。

-1

尝试解决此代码的简单while循环,像这样:

String answer = scanner.nextLine(); 

while (true) 
{ 
    for (Answer a : question.getAnswers()) 
    { 
     if (a.getAnswer().toLowerCase().contains(answer)) 
     { 
      System.out.println(a.getAnswer() + " " + a.getPoints()); 
     } 
     else 
      break; // exit the loop if IF statement is false. 
    } 
    System.out.println("WRONG!"); 
    break; 
} 
2

你不需要goto了点。更好的方法是使用break和循环后检查结果:

Question question = questions.get(new Random().nextInt(questions.size())); 
System.out.println(question.getQuestion()); 
bool success = false; 
Scanner scanner = new Scanner(System.in); 

for (int i = 0; i < 3 && !success; i++) { 
    String answer = scanner.nextLine(); 
    for (Answer a : question.getAnswers()) { 
     if (a.getAnswer().toLowerCase().contains(answer)) { 
      System.out.println(a.getAnswer() + " " + a.getPoints()); 
      success = true; 
      break; 
     } 
    } 
} 

if (!success) { 
    System.out.println("WRONG!"); 
}