2016-09-14 39 views
5

我想讓我的代碼阻止用戶輸入數字。如何防止Java中的整數輸入?

基本上我想要的代碼做如下:

  1. 要求輸入
  2. 接收輸入
  3. 測試的輸入是否包含號碼(例如:5matt與馬特)
  4. 如果包含我想要的數字System.out.println("Error: please do not input a number");

繼承人踢球者(以及爲什麼它不是一個重複的問題):我可以' t使用循環或我們還沒有學習的其他語句。到目前爲止,我們學到的唯一真實的陳述是if/else/else if語句。這意味着我不能使用for循環,就像一些答案提示的那樣。雖然他們是很好的答案,並且工作,但我會因使用它們而失去點數。

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')使用*正則表達式*,它會告訴你如果* *字符串包含任何數字。 –

+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

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); 
} 

僅使用IF/ELSEIF /別的,Character.isDigit和String.charAt,但是遞歸可能是關閉的限制,以及。

相關問題