2017-03-02 19 views
0

我正在嘗試使用用戶輸入的字符串在二維數組中找到一個數組。但是,我一直得到「字符串[] []不能轉換爲字符串」錯誤。我可以用鍵盤掃描儀和字符串來做到這一點,還是有更合理的解決方案來解決這個問題。是否可以將字符串與2D數組中的數組名稱進行比較?

import java.util.Scanner; 

public class QandA{ 

    public static void main(String[] args){ 
     String entry; 
     String[] Why = new String[]{"Because.", "Just Because.", "Why yourself."}; 
     String[][] Questions = new String[][] { Why }; 
     Scanner k = new Scanner(System.in); 
     entry = k.next(); 
     for (int i=0 ; i < Questions.length ; i++){ 
      if (entry.equalsIgnoreCase(Questions)){ 
       System.out.println("Test"); 
       break; 
      } 
      if (i == Questions.length){ 
       if (!entry.equalsIgnoreCase(Questions)){ 
        System.out.println("Test2"); 
       } 
      } 
     } 
    } 
} 

編輯:

我已經改變了我的二維數組轉換成一個HashMap,但我得到一個「無法找到符號,一流的Hashmap」進口的java.util.HashMap後均勻;幫幫我? [固定]

import java.util.Scanner; 
import java.util.Map; 
import java.util.HashMap; 
import java.util.*; 

public class QandA{ 

    public static void main(String[] args){ 
     String UE; 
     String[] Why = new String[]{"Because.", "Just Because.", "Why yourself."}; 
     Map<String, String[]> Questions = new HashMap<>(); 
     Questions.put("Why", Why); 
     Scanner k = new Scanner(System.in); 
     UE = k.next(); 
     if(Questions.keySet().stream().filter(UE::equalsIgnoreCase).findFirst().isPresent()) { 
      System.out.println("Test"); 
     } else { 
      System.out.println("Test2"); 
     } 
    } 
} 
+0

這是有點不清楚你想比較'entry'與什麼。用「問題」中的任何一個詞?只是每個問題的第一個問題?顯然,重複'if(entry.equalsIgnoreCase(Questions)){'10次而不改變任何東西根本沒有意義。 if(entry.equalsIgnoreCase(Questions [i] [0])){'可能會編譯,甚至可能有點意義,取決於您的要求。 –

+0

@ammoQ我希望它檢查與條目相同的問題中的數組名稱。然後,如果找到它,則打印「Test」;如果找不到,則打印「Test2」。 –

+0

http://stackoverflow.com/questions/744226/java-reflection-how-to-get-the-name-of-a-variable – Mawcel

回答

1

首先,需要使用一個Map(而不是String[][])來映射數組變量到其實例的名稱:

String[] Why = new String[]{"Because.", "Just Because.", "Why yourself."}; 
Map<String, String[]> Questions = new HashMap<>(); 
Questions.put("Why", Why); 

接下來,可以執行測試/ Test2以多種方式檢查。這裏有一種方法:

if(Questions.keySet().stream().filter(entry::equalsIgnoreCase).findAny().isPresent()) { 
    System.out.println("Test"); 
} else { 
    System.out.println("Test2"); 
} 

作爲一個方面說明,你的變量名稱是非常具有誤導性的。 「Entry」在地圖上下文中具有不同的含義,因爲它封裝了一個Key + Value Pair。你應該使用有意義的變量名稱,並符合現有的關於大小寫的Java約定等。

+0

還有什麼其他的,因爲我得到一個錯誤說:找不到符號映射並找不到符號哈希映射 –

+0

@HenryFieglein這是因爲你必須將導入語句添加到文件的頂部。就像您導入Scanner一樣,您必須導入Map和HashMap。 –

+0

我建議你研究一下Map的文檔,它的keySet,entrySet,put和get方法。 –

相關問題