2016-09-14 2 views
5

Я пытаюсь получить мой код, чтобы предотвратить ввод пользователем из числа.Как предотвратить целочисленный ввод в Java?

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

  1. просят ввода
  2. получать входные
  3. тест на входе, содержит ли число (например: 5matt против матового)
  4. если содержит номер Я хочу System.out.println("Error: please do not input a number");

Heres the kicker (и почему это не дублирующий вопрос): я могу " t использовать циклы или другие утверждения, которые мы еще не изучили. До сих пор единственными истинными утверждениями, которые мы узнали, являются if/else/else if statements. Это означает, что я не могу использовать для циклов, как предлагают некоторые из ответов. Хотя они отличные ответы и работают, я потеряю очки за их использование.

System.out.println("Please input the first name: ");  
String name1 = in.next(); 
System.out.println("Please input the second name: "); 
String name2 = in.next(); 
System.out.println("Please input the third name: "); 
String name3 = in.next(); 

name1 = name1.substring(0,1).toUpperCase() + name1.substring(1).toLowerCase(); 
name2 = name2.substring(0,1).toUpperCase() + name2.substring(1).toLowerCase(); 
name3 = name3.substring(0,1).toUpperCase() + name3.substring(1).toLowerCase(); 

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

+4

Вы должны привыкнуть к чтению через [документацию по API] (http://docs.oracle.com/javase/8/docs/api/index.html). В частности, 'Character' имеет метод' isDigit() '. – azurefrog

+0

** Или **, используйте * регулярное выражение *, как 'str.matches (". * \\ d. * ")' (Где 'str' является' String'), который скажет вам ** if * * 'String' содержит любые цифры. –

+0

'if (name1.matches (". * \\ d +. * ") || name2.matches (". * \\ d +. * ") || name3.matches (". * \\ d +. * ")) {// здесь; } else {// no nums; } ' – px06

ответ

2

Хорошо, есть много способов справиться с этим. Хорошо бы было использовать Regex (текст, соответствующий материалу). Но кажется, что вы должны использовать только очень простые методы сравнения. Итак, давайте сделаем что-то очень простое и понятное: мы перебираем каждый символ ввода и проверяем, является ли это цифрой или нет.

String input = ... 
// Iterate over every character 
for (int i = 0; i < input.length(); i++) { 
    char c = s.charAt(i); 

    // Check whether c is a digit 
    if (Character.isDigit(c)) { 
     System.out.println("Do not use digits!"); 
    } 
} 

Этот код очень прост. Но он продолжит проверку, даже если найдена цифра. Вы можете предотвратить это с помощью помощника-метод, а затем return ИНГ от него:

public boolean containsDigit(String text) { 
    // Iterate over every character 
    for (int i = 0; i < input.length(); i++) { 
     char c = s.charAt(i); 

     // Check whether c is a digit 
     if (Character.isDigit(c)) { 
      return true; 
     } 
    } 
    // Iterated through the text, no digit found 
    return false; 
} 

И в основной программе вы называете это так:

String input = ... 
if (containsDigit(input)) { 
    System.out.println("Do not use digits!"); 
} 
+0

По крайней мере, используйте цикл for-each. – GhostCat

+0

По крайней мере 'break' на первой цифре –

+1

Сначала я хотел, но потом я подумал о том, что OP может не знать таких вещей, как кажется, что он новичок. – Zabuza

2

Используйте регулярное выражение для фильтрации входного

Например

str.matches(".*\\d.*") 

Смотрите this link для получения дополнительной информации

0

Есть несколько способов, которыми Вы могли бы сделать это, среди прочего:

  • перебрать все символы в строке и проверить, является ли какое-либо из них является цифрой.
  • Проверьте, содержит ли строка номер 1, номер 2, номер 3 и т. Д.
  • Используйте регулярное выражение, чтобы проверить, содержит ли строка цифру.

(Java Regular Expressions)

0

Если вы позволили определить функции, вы можете существенно использовать рекурсию, чтобы выступать в качестве цикла. Наверное, не то, что ваш профессор собирается, но вы можете быть только внутри требований в зависимости от того, как они сформулированы.

public static boolean stringHasDigit(String s) { 
    if (s == null) return false; //null contains no chars 
    else return stringHasDigit(s, 0); 
} 

private static boolean stringHasDigit(String s, int index) { 
    if (index >= s.length()) return false; //reached end of string without finding digit 
    else if (Character.isDigit(s.charAt(index))) return true; //Found digit 
    else return stringHasDigit(s, index+1); 
} 

только использует, если/ElseIf/другое, Character.isDigit и String.charAt, но рекурсия может быть воспрещен, а также.

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