2017-03-02 5 views
0

私は、ユーザーからの文字列入力を使用して2次元配列の配列を検索しようとしています。しかし、私は "String [] []をStringに変換することはできません"エラーを取得し続けます。キーボードのスキャナや文字列でこれを行うことができますか、この問題に対するより論理的な解決方法がありますか?文字列と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"); 
       } 
      } 
     } 
    } 
} 

EDIT:

私はハッシュマップに私の2次元配列を変更しましたが、でも、java.util.HashMapをインポート後「のシンボルを見つけることができない、クラスHashMapを」取得しています。助けて?あなたは、そのインスタンスに配列変数の名前をマッピングする(代わりString[][]の)Mapを使用する必要が

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

''エントリと比較したいことは少し不明です。 「質問」の言葉のどれかで?各質問の最初の1つだけ?明らかに、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

まず[FIXED]:

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」は、キーと値のペアをカプセル化するため、マップのコンテキストでは異なる意味を持ちます。意味のある変数名を使用して、大文字と小文字などに関するJavaの既存の規則に準拠する必要があります。

+0

私はエラーが表示されているために何か他のものがあります:シンボルマップを見つけることができませんシンボルのハッシュマップ –

+0

@HenryFiegleinそれは、ファイルの先頭にインポートステートメントを追加する必要があるためです。読み込まれたスキャナと同じように、MapとHashMapをインポートする必要があります。 –

+0

Mapのドキュメンテーションを勉強することをお勧めします。それはkeySet、entrySet、put、およびgetメソッドです。 –

関連する問題