2011-01-25 86 views
2

对不起,这里有个愚蠢的问题,我用Google搜索了它,但是我搜索的任何东西似乎都是返回使用二分查找等的方法,但我需要的其实更简单。我有一个语言数组。我正在创建一个扫描仪,要求输入。试图做到这一点,以便如果用户输入的语言不在数组中,它会显示错误并再次提问。应该很简单,我只是画了一个空白。Java数组问题

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

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

甚至不是有效的Java代码... – Argote 2011-01-25 18:04:53

+0

所以这个问题是试图确定一个值是否在一个阵列已,即在数组中搜索特定的值? – 2011-01-25 18:05:43

+0

我意识到这一点,它的伪代码。指出我说的是有效的代码? – user476033 2011-01-25 18:06:54

回答

4

我现在明白你的问题了。你当然应该使用Set。但是您会希望使用该集合的方法来检查语言是否存在。

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

你可以这样做:

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

有两件事情可以做:

无论是遍历数组和各元素含量比较你想看看是否有什么每当你添加一种语言时,它就在那里。

OR

使用一个LinkedList或一些其他类型的Java结构具有.contains()方法,这将在某种程度上,做类似于我在阵中提到的东西。

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