2016-02-19 4 views
4

Я довольно новичок в java и пытаюсь сделать римский калькулятор чисел. У меня есть основное кодирование, но я хочу добавить возможность проверки «незаконных» символов в основной строке.В Java повторяющийся запрос до тех пор, пока все символы в строке не будут приняты

Я создал метод под названием «ValidCheck», чтобы проверить все символы в строке на список допустимых символов.

public static boolean ValidCheck(String letter){ 
    boolean okay = true; 
    for (int i = 0; i < Letters.length; i++){ 
     if (Letters[i] != letter){ 
      okay = false; 
     } 
    }   
    return okay; 
} 

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

System.out.print("Type in a Roman Numeral value: "); 
String roman = kb.next(); 
for (int i = 0; i < roman.length(); i++){ 
    if (ValidCheck(roman.charAt(i) + "") == false){ 
     System.out.println("Error with input. Unexpected character.");  
    } 
} 

ex.

Type in a Roman Numeral : MMDK 

Error with input. Unexpected character. 

Type in a Roman Numeral : 

мне интересно, как я могу поставить это в петлю, чтобы задать несколько раз, пока вход не будет считаться приемлемым с использованием метода? Также, поскольку я довольно новый, объяснение того, как оно повторяется, и как значение возвращается из цикла, будем очень благодарны!

+6

'if (Letters [i]! = Letter) {' -> [Как сравнить строки в Java?] (Http://stackoverflow.com/questions/513832/how-do-compare -strings-in-java) – Pshemo

ответ

2

Я рекомендую использовать java.util.Scanner в сочетании с бесконечным контуром. A Scanner прост в использовании и решает многие из общих задач.

Пример кода может выглядеть следующим образом:

import java.util.Scanner; 

public class LoopingInput { 
    public static void main(String[] args) { 
     try (Scanner scanner = new Scanner(System.in)) { 
      for (;;) { 
       System.out.println("Type in a Roman Numeral value: "); 
       String nextLine = scanner.nextLine(); 
       if (!nextLine.matches("[IVXLCDM]+")) { 
        System.out.println("Error with input. Unexpected character."); 
       } 
       // you may want to "return nextLine" or similar in an "else" branch 
      } 
     } 
    } 
} 

объяснение:

  • try (...) {...} особенность Java-8, который будет автоматически закрывать объект - даже если что-то неожиданное происходит
  • System.in - вход по умолчанию - и в большинстве случаев это командная строка или вход файла
  • scanner.nextLine() ждет, когда пользователь войдет в новую строку; и возвращает эту строку
  • nextLine.matches("[IVXLCDM]+") использует регулярное выражение, чтобы подтвердить ваш ввод. В таких ситуациях это очень удобно. Он ищет любое число (+) из IVXLCDM символов.
+0

Я думаю, что он должен возвращаться, когда вход действителен. – Bifz

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