2011-01-25 79 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(); 
    }