Java数组问题

时间:2011-01-25 18:02:51

标签: java arrays search

很抱歉,这里有一个愚蠢的问题,我用谷歌搜索了它,但我搜索的任何内容似乎都在返回使用二进制搜索等的方法,但我需要的实际上更简单。

我有一系列语言。我正在创建一个扫描仪,要求输入。试图使其成为如果用户输入的语言不在数组中,它会显示错误并再次询问。应该很简单,我刚刚画了一个空白。

有人可以帮忙吗?这是我到目前为止!

      Scanner scan = new Scanner(System.in);
      language = scan.next();
      while( language NOT IN ARRAY languages) {
       System.out.print("error!");
       language = scan.next();
     }

4 个答案:

答案 0 :(得分:4)

我现在更了解你的问题。您应该使用Set来确定。但是您需要使用集合的contains()方法来检查语言是否存在。

Scanner scan = new Scanner(System.in);
language = scan.next();
while(!set.contains(language)) {
    System.out.print("error!");
    language = scan.next();
}

旧答案,但仍然是相关信息:
您想要使用的是Set集合类型。集合不允许重复输入。 来自Javadocs:

  

不包含重复元素的集合。

Set<String> set = new HashSet<String>();
// will not add another entry if set contains language already
set.add(language);

此外,如果您想知道该值是否被拒绝,您可以使用add()方法的返回类型。如果该项不存在则返回true,否则返回false。

答案 1 :(得分:1)

您可以执行以下操作:

public static boolean contains(String language, String[] lang_array) {
    for (int i = 0; i < lang_array.length; i++) {
        if (lang_array[i].equals(language))
            return true;
    }

    return false;
}

public static void main(String[] args) {
    String[] lang_array = {"Java", "Python", "Ruby"};
    Scanner scan = new Scanner(System.in);
    String language = scan.next();
    while(!contains(language, lang_array)) {
        System.out.print("error!");
        language = scan.next();
    }
}

答案 2 :(得分:1)

你可以这样做,你真的需要使用数组:

   Arrays.sort(languages);
   Scanner scan = new Scanner(System.in);
   language = scan.next();
   while( Arrays.binarySearch(languages, language) < 0) {
    System.out.print("error!");
    language = scan.next();
   }

答案 3 :(得分:0)

您可以做两件事:

遍历数组并将每个元素的内容与每次添加语言时的内容进行比较。

OR

使用LinkedList或其他一种具有.contains()方法的Java结构,这在某种程度上会做类似于我在数组中提到的内容。