2014-10-26 47 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中做过)。执行一个循环,询问输入,直到它是正确的,或者直到它成为你的结尾字符。

我不是故意发布完整的解决方案代码,因为它更适合您玩代码并学习。我只给出了如何尝试的方向;当然这不是唯一的方式,但它符合你已经开始的。