2016-11-10 2 views
0

В настоящее время я делаю игровой автомат. Я столкнулся с проблемой, связанной с необходимостью петли оператора IF, но только если пользовательский ввод «ДА», внутри этого цикла? Вот пример кода, который я пытаюсь сделать.Застрял с циклом утверждения if изнутри себя

int num1 = 0; 
int num2 = 0; 
int num3 = 0; 

Scanner scan = new Scanner(System.in); 
Random numRand = new Random(); 

num1 = numRand.nextInt((9 - 0) + 1); 
num2 = numRand.nextInt((9 - 0) + 1); 
num3 = numRand.nextInt((9 - 0) + 1); 

System.out.println(num1 + " " + num2 + " " + num3); 

if(num1 == num2 && num1 == num3 && num2 == num3) { 
    System.out.println("All three match - jackpot"); 
    System.out.printf("Would you like to play again? "); 
    String Yes = scan.nextLine(); 
    if(Yes.equals("y")) { 

    } 
    String No = scan.nextLine(); 
    if(No.equals("n")) { 

    } 
} 
else if(num1 == num2 || num2 == num3 || num1 == num3) { 
    System.out.println("Two number match"); 
    System.out.printf("Would you like to play again? "); 
    String Yes = scan.nextLine(); 
    if(Yes.equals("y")) { 

    } 
    String No = scan.nextLine(); 
    if(No.equals("n")) { 

    } 
} 
else { 
    System.out.println("No numbers match"); 
} 
scan.close(); 

Из моего кода, вы можете увидеть, что в заявлении, если я пытаюсь запустить другой, если заявление, когда ввод пользователя = Y (Да) это так, что если пользователь вводит у при запросе, оператор if будет циклическим.

исходы сказано, что если все три числа совпадают, то выход: если 2 номера матча, выход: если нет номера совпадают, то выход:

Я надеюсь, вы понимаете

+1

взгляд в 'while' цикла: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/while.html – rafid059

+1

Кроме того, обратите внимание на' break' заявление. http://stackoverflow.com/questions/7951690/how-do-i-exit-a-while-loop-in-java – rafid059

+1

Чтобы прояснить комментарий @RafiduzzamanSonnet, немного узнайте о do ... while loop. Начните просто, например, попробуйте запросить пользователя для номера до тех пор, пока они не войдут в 9. Также подумайте, что за пределами вашего оператора if это действительно требуется, или вы каким-то образом можете использовать его как условие цикла? Удачи! – Stefan

ответ

1

Я бы предложил построить do while.

Scanner scan = new Scanner(System.in); 
Random numRand = new Random(); 

boolean keep_playing = true; 

do 
{ 
    num1 = numRand.nextInt((9 - 0) + 1); 
    num2 = numRand.nextInt((9 - 0) + 1); 
    num3 = numRand.nextInt((9 - 0) + 1); 

    System.out.println(num1 + " " + num2 + " " + num3); 

    if(num1 == num2 && num1 == num3) { // && num2 == num3 - unnecessary 
     System.out.println("All three match - jackpot"); 
    } 
    else if(num1 == num2 || num2 == num3 || num1 == num3) { 
     System.out.println("Two number match"); 
    } 
    else { 
     System.out.println("No numbers match"); 
    } 

    System.out.printf("Would you like to play again? "); 

    String input = scan.nextLine(); 
    keep_playing = input.equals("y"); 

} while (keep_playing) 

scan.close(); 
+0

Спасибо большое! Это был правильный способ сделать это, и вы очень помогли мне! – SeanHub

+0

@SeanHub Нет проблем, рад помочь. – Michael

1

1. рекурсии

Существует два способа получить это, одно дело - обработать его через recursion. Например. если весь этот код находится в работе с этой сигнатурой

Вы можете просто добавить к нему вызов, например.

if(Yes.equals("y")) { 
     main(new String[0]); // String[0] is just to satisfy the arguments of the main function, if yours requires other arguments, put them there 
    } 

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

2. В то время как петля

Другой вариант поставить весь свой код в while конструкцию и использовать continue для выполнения всего кода внутри еще раз и break оставить петлю:

while (true) { 
    // S: loop start 
    num1 = numRand.nextInt((9 - 0) + 1); 
    . . . 
    if(Yes.equals("y")) { 
     continue; // this will cause us to go to S 
    } else { 
     break; // this will cause us to go to A 
    } 
} 
// A: after loop 
+1

Вы также можете использовать логическую переменную вместо бесконечного цикла, некоторые люди считают, что ее легче читать. – jthort

+0

Использование метода рекурсии действительно помогло большому времени, но я все еще сталкивался с некоторыми проблемами на более позднем этапе, когда цикл работал так, как я этого хотел! Спасибо, много! :) – SeanHub

Смежные вопросы