2014-10-26 67 views
-1

從用戶處獲取單個字母。該方法驗證它是有效的字母還是退出字符'!'。它最終會繼續要求的字符,那麼一旦用戶完成,他們會輸入「!」,使循環結束,並移動到打印他們的字符如何讓用戶搜索字母數組中的字母?

public static String isValidLetter(){ 
    char[] charArray; 
    charArray = new char[11]; 
    charArray[0] ='C'; 
    charArray[1] ='E'; 
    charArray[2] ='F'; 
    charArray[3] ='H'; 
    charArray[4] ='I'; 
    charArray[5] ='J'; 
    charArray[6] ='L'; 
    charArray[7] ='O'; 
    charArray[8] ='P'; 
    charArray[9] ='S'; 
    charArray[10] ='T'; 
    charArray[11] ='U'; 

    String input; 
    char letter; 
    Scanner kb = new Scanner(System.in); 

    System.out.println("Enter a single character: "); 
    input=kb.nextLine(); 
    letter = input.charAt(0); 
+0

你能準確地說出你的問題是什麼嗎?你只向我們展示了一半的代碼。你在問輸入循環還是關於搜索? – RealSkeptic 2014-10-26 21:11:43

+0

您的任務是編寫一個搜索算法,還是您正在尋找一種更簡單的方法來搜索數據結構,比如ArrayList.contains()?我在想ArrayList是這裏的一種方式,因爲你聲明代碼應該一直詢問輸入,直到輸入終止字符,這意味着一個開放式的情況。如果事先知道輸入和ArrayList的精確大小,請使用數組。 – MarsAtomic 2014-10-26 21:12:01

+0

你不能用掃描儀做到這一點,控制檯上的分隔符是ENTER,而不是! – 2014-10-26 21:14:45

回答

0

閱讀從控制檯的字符串列表。 。類型「是」,進入「b」,輸入「!」,進入

import java.util.*; 

public class Main { 
    public static void main(String[] args) throws IOException { 
     Scanner scann = new Scanner(System.in); 
     List<String> letterWords = new LinkedList<String>(); 
     String str = null; 
     while (!"!".equals(str)) { 
      str = scann.next(); 
      letterWords.add(str); 
     } 
     for (String word : letterWords) { 
      System.out.println(word); 
     } 
     scann.close(); 
    } 
} 
0

如果你只是想有一個有效字符「收藏」,那麼你也可以使用一個String,而不是一個陣列。這將是更容易在它來搜索,並在你的榜樣避免類似的錯誤(你初始化的11大小的數組,但你插入12元素):

public static boolean isValidLetter(final char character) { 
    final String validCharacters = "CEFHIJLOPSTU"; 
    return validCharacters.contains(String.valueOf(character)); 
} 

這個方法只需要單char,如果有效則返回true,否則返回false。請注意,這個檢查是case sensitive

您可以使用該方法是這樣的:直到他進入!

final Scanner scan = new Scanner(System.in); 
String input; 
while (!(input = scan.nextLine()).equals("!")) { 
    if (!input.isEmpty() && isValidLetter(input.charAt(0))) { 
     // ... store valid input 
     System.out.println("valid"); 
    } 
} 

這個循環要求用戶輸入。我省略了存儲部分。這取決於你做最後一部分。

0

修改您的isValidLetter方法以返回布爾值。
修改您的isValidLetter方法以獲取char作爲參數。
在isValidLetter,試圖通過使用一個輔助函數找到了一封信,是這樣的:

static boolean contains(char c, char[] array) { 
    for (char x : array) { 
     if (x == c) { 
      return true; 
     } 
    } 
    return false; 
} 

某處在你的代碼,你需要輸入(或主要用於測試),要求用戶輸入(如你已經在isValidLetter中做過)。執行一個循環,詢問輸入,直到它是正確的,或者直到它成爲你的結尾字符。

我不是故意發佈完整的解決方案代碼,因爲它更適合您玩代碼並學習。我只給出瞭如何嘗試的方向;當然這不是唯一的方式,但它符合你已經開始的。