2017-01-23 5 views
0

Я изучаю Java, по крайней мере, я пытаюсь. Теперь я сделал приложение, где вам нужно угадать случайное число, сгенерированное с помощью math.random.Угадайте случайное число

Вот код:

import java.util.Scanner; 

public class var { 
    public static void main(String[] args) { 

     Scanner keyboard = new Scanner(System.in); 
     //var definitie 
     int player; 
     int rnummer; 

     rnummer = (int) (Math.random() * 50 + 1); 

     System.out.println("Raad het nummer!"); 
     player = keyboard.nextInt(); 
     System.out.println(rnummer); 

     //goed geraden check 
     if (player == rnummer) { 
      System.out.println("Helaas, dat is niet juist."); 
      player = keyboard.nextInt(); 
     } 
     System.out.println("Goed geraden!"); 
    } 
} 

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

+0

Что вы подразумеваете под 'каждый раз, когда вы предполагаете, что это правильно, вы не можете догадаться, что неправильно? –

+0

Поток кажется довольно простым: если число было правильным (==), то отображается сообщение об ошибке («dat is niet juist.»), А затем считывается другое число. Затем отображается положительный результат («Goed geraden!»). – BurninLeo

+0

Тем не менее, независимо от того, какой номер я набираю, он всегда хорош, даже когда я печатаю случайное сгенерированное число и набираю что-то еще. – Luukwa

ответ

6

Вы должны понимать, что заявление:

if (player == rnummer) 
{ 
    System.out.println("Helaas, dat is niet juist."); 
    player = keyboard.nextInt(); 
} 

Это означает:

if player is equals to rnummer 
then 
    print "Helaas, dat is niet juist." 
    ask a value and store it in player 
and read the next line 

Но что вы хотите

if player is NOT equals to rnummer 
then 
    print "Helaas, dat is niet juist." 
    ask a value and store it in player 
check again the condition 

Это то, что мы называем петлю. Это похоже на if, но выйдет только из инструкции, если условие ложно.

while(player != rnummer) 
{ 
    System.out.println("Helaas, dat is niet juist."); 
    player = keyboard.nextInt(); 
} 

if только выполнить блок заявление один раз, если условие истинно.

A while будет выполнять блок до тех пор, пока условие не станет ложным.

ПРИМЕЧАНИЕ. Поскольку цикл завершается только тогда, когда условие является ложным (не совсем верно, некоторые ключевые слова могут выйти из них, но это другой вопрос), вы можете закончиться бесконечным циклом, что означает, что условие будет НИКОГДА быть ложным.

while(true){ 
    //Statement 
} 
// Unreachable code 
+0

Это делает его довольно понятным, желая, чтобы было больше веб-сайтов/книг, которые могли бы объяснить это как что. – Luukwa

+1

@Luukwa Есть учителя для этого;) – AxelH

+0

@Luukwa, я только что добавил небольшой комментарий о цикле while, это должно быть интересно предотвратить некоторые неожиданные ошибки;) – AxelH

2

Вам просто нужно заменить if заявление с while цикла:

while (player != rnummer) { 
    System.out.println("Helaas, dat is niet juist."); 
    player = keyboard.nextInt(); 
} 

что в Natual языке может быть tranlated в «В то время как ваше предположение отличается от случайного числа, продолжайте пробовать». Если вы используете только if, код внутри скобок {} будет выполняться только в том случае, если это условие истинно, но после этого программа продолжит следующую команду, которая будет System.out.println("Goed geraden!"); в вашем коде.

+0

Это похоже на исправление, спасибо! Еще не в циклы .. почему я использовал if. – Luukwa

+0

@Luukwa не проблема, мы все здесь, чтобы узнать ^^ Я добавил краткое объяснение, я надеюсь, что это может быть полезно :) – SimoV8