2014-10-08 2 views
0

Мне нужно добавить метод в мою игру догадки, которую я сделал некоторое время назад. Метод должен возвращать введенное значение, но должен использовать цикл, чтобы потребовать повторного ввода, пока не будет указано одно из этих двух значений. Также, если пользователь вводит слово, а не int, он должен запросить номер. Я знаю, что мне нужно будет использовать строку вместо int. У меня просто возникают проблемы с этим. Вот то, что я до сих пор:Угадай игру, добавив метод

import java.util.Random; 

import java.util.Scanner; 

class GuessNumber { 

    static Random rand = new Random(); 
    static Scanner scan = new Scanner(System.in); 
    static int number; 

    public static void main(String[] args) { 
     playGame(); 
    } 

    public static void playGame() { 
     number = rand.nextInt(100) + 1; 
     System.out.println("Guess the number between 1 and 100"); 
     while (true) { 
      int guess = scan.nextInt(); 
      if (guess < number) { 
       System.out.println("Higher!"); 
      } else if (guess > number) { 
       System.out.println("Lower!"); 
      } else if (guess == number) { 
       System.out.println("Correct!"); 
       Scanner scan2 = new Scanner(System.in); 
       System.out.println("do you wanna play again?[Y/N]"); 
       String val = scan2.next(); 
       if (val.equalsIgnoreCase("Y")) { 
        playGame(); 
       } else { 
        break; 
       } 
      } 
     } 
    } 
} 
+0

... И? Здесь есть вопрос? – Qix

+4

@Qix Это, видимо, часть игры угадывания, которую он сам ... – MadProgrammer

+0

Если вы знаете, что вам придется использовать String вместо int, начните с перезаписи кода, чтобы отразить то, что вы (правильно) знаете, вам понадобится. Затем используйте свой интернет-поиск Fu, чтобы узнать о методе parseInt() String. Возьмите несколько минут, чтобы прочитать, что вы найдете, и подумайте о том, как вы можете использовать parseInt(), чтобы вывести ввод String в число, которое вы можете сравнить. Кроме того, просмотрите метод compare() String, чтобы увидеть, является ли одна строка лексикографически более высокой, более низкой или той же, что и другая String. – MarsAtomic

ответ

2

Там может быть лучший способ сделать это, но попробовать что-то вдоль линий:

String input = scan.next(); 
int guess; 
try{ 
    guess = Integer.parseInt(input); 
    //rest of the code inside while(true) loop 
} 
catch(Exception e){ 
    System.out.println("You need to enter a valid number."); 
} 

, а затем для проверки Y/N:

String val = "No"; 
Scanner scan2 = new Scanner(System.in); 
do{ 
    System.out.println("do you wanna play again?[Y/N]"); 
    val = scan2.next(); 
} 
while(!val.equalsIgnoreCase("Y") && !val.equalsIgnoreCase("N")) 
if (val.equalsIgnoreCase("Y")) { 
    playGame(); 
    break; 
} else { 
    break; 
} 

Причина: вы получите сообщение об ошибке, если они не введут действительный номер, поэтому вам нужно поймать ошибку и сообщить им, что не так. Мне нравится вводить строку как строку и пытаться преобразовать ее в целые числа. Что касается секции do/while ... Если они не войдут в Y или N, они будут продолжать спрашивать их. Выйдя из цикла, если вход был «Y», он снова вызовет playGame(), а затем разрывается после его завершения (в основном, когда пользователь вводит n в следующей игре). Если это не было «Y», тогда это должно быть «N», и ему нужно сломаться.

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

+0

за помощь! – user4068770

1

Когда вы объявляете ваши статические переменные, говоря:

static int number, guess; 

Объявить оба номера одновременно. Затем внутри основного контура выполните следующие действия:

while (true) { 
    while (true) { 
     try { 
      guess = Integer.parseInt(scan.nextLine()); 
      break; 
     } catch (Exception e) { 
      System.out.println("Not a valid number!"); 
      continue; 
     } 
    } 
    //Rest of your if's, else if's, etc 
} 

Я протестировал его, и он работает для меня.

Если вам нужен я, я могу вставить весь код, но вы должны иметь возможность просто вложить эту секунду, пока цикл внутри первого, перед инструкциями if, достаточно прост.

+0

Спасибо за помощь, я получил ее на работу! – user4068770

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