2016-01-23 4 views
0

Теперь я знаю, что есть поток под названием «Проверка ввода с помощью java.util.Scanner». Я уже смотрел там, и эта нить отвечала только на 1/2 моих проблем. Другая половина - когда кто-то вводит число больше 2, я получаю индекс массива из исключения исключений. Я просто нужна помощь, если кто-то входит в 3 для каждой строки или столбца, консоль должна подсказать что-то вроде этого:Продолжайте запрашивать пользователя после недопустимого ввода

"Enter the coordinates to place an 'X'. Row then Column." 
//enters 3 and 3 
"Please enter a valid input" 

Это будет держать и спрашивать у пользователя действительного числа, пока он не дает человеку.

Должен ли я сделать что-то вроде клавиатуры keyboard.hasNextInt(), но для целых чисел? И это будет нормально работать с остальной частью моего кода?

ответ

1

Вы можете использовать цикл do-while. Что-то вроде

do { 
    //prompt 
    //input 
} while (input not valid); 

Где prompt и input должен быть заменен кодом, чтобы предложить пользователю и принимать входные данные. В разделе while проверьте правильность ввода.

0

Вы не слишком понятны, но я постараюсь понять это.

Я предполагаю, что вы назвали ваш сканер «клавиатура»

Прежде чем я попробуйте запустить этот код, первая проблема, которую я вижу в этом (Обратите внимание, что я схватил это из кода перед редактированием вопрос):

while (board[row][col] != ' ') 
{ 
    System.out.println("Already occupied space"); 
    System.out.println("Choose again"); 
    row = keyboard.nextInt(); 
    col = keyboard.nextInt(); 
} 

Раньше вы убедились, что пользователь вводит целые числа. Однако вы полностью отказались от этого.

Предполагая, что вы пытаетесь избежать ошибки, если пользователь вводит что-то другое, чем целое, это то, что я хотел бы сделать:

while(true){ 
     boolean valid = true;  

     if(!keyboard.hasNextInt()){ 
      valid = false; 
      keyboard.next(); 
     } 
     else{ 
      row = keyboard.nextInt(); 
     } 
     if(!keyboard.hasNextInt()){ 
      valid = false; 
      keyboard.next(); 
     } 
     else{ 
      col = keyboard.nextInt(); 
     } 
     if (valid && (row > 2 || col > 2)){ 
      System.out.println("Please enter a valid input"); 
      continue; 
     } 
     else if(!valid){ 
      System.out.println("Please enter a valid input"); 
      continue; 
     } 
     else 
      break; 
    } 

Есть несколько причин, этот код может показаться немного долго. Во-первых, мы пытаемся проверить, является ли вход целое число до, мы пытаемся сохранить его как int. Во-вторых, мы хотим сравнить вход после, мы храним его успешно, чтобы увидеть, если оно меньше 3. Если вход не является целым числом, логическое значение «valid» будет ложным. Способ работы компилятора, если он действителен в инструкции if, он будет игнорировать что-либо справа от & &, избегая ошибки.

Я признаю, что это использование некоторых команд, которые я еще не изучил раньше, поэтому это может быть не самый эффективный способ. Но вы получаете идею :)

P.S. Вероятно, вы должны выбросить вышеуказанный код в метод.

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