2017-07-31 9 views
-4

私はこのリストに3つのリストがあるとします。ユーザーが2つの文字列を入力すると、アプリケーションは2つの文字列が同じリストにあるかどうかを確認する必要があります。そうであれば、ユーザには同じリストにあることを伝え、両方のインデックスを出力する必要があります。それ以外の場合は、リスト文字列1とそのリスト内のインデックス、そして文字列2についても同じことをユーザーに伝える必要があります。リスト内の要素を検索し、見つからない場合は別のリストで検索してください

List<String> list1 = Arrays.asList("apples", "oranges"); 
List<String> list2 = Arrays.asList("tomato", "potato"); 
List<String> list3 = Arrays.asList("meat", "tuna"); 

Scanner in = new Scanner(System.in); 
String str1 = in.nextLine(); 
String str2 = in.nextLine(); 
in.close(); 

if(list1.contains(str1)) System.out.println("in list1"); 
else if(list2.contains(str1)) System.out.println("in list2"); 
else if(list3.contains(str1)) System.out.println("in list3"); 
else if(list1.contains(str2)) System.out.println("in list1"); 
else if(list2.contains(str2)) System.out.println("in list2"); 
else if(list3.contains(str2)) System.out.println("in list3"); 
else System.out.println("Not found"); 

は、このコードを改善する方法はありますか、私はちょうど私が持っているすべてのケースについてif条件を書いて維持する必要がありますか?

答えて

0

地図ここ

で試してみてくださいはコードです:

List<String> list1 = Arrays.asList("apples", "oranges"); 
    List<String> list2 = Arrays.asList("tomato", "potato"); 
    List<String> list3 = Arrays.asList("meat", "tuna"); 

    Scanner in = new Scanner(System.in); 
    String str1 = in.nextLine(); 
    String str2 = in.nextLine(); 

    Map<String,List<String>> lists = new HashMap<>(); 
    lists.put("list1",list1); 
    lists.put("list2",list2); 
    lists.put("list3",list3); 

    boolean found = false; 
    for(Map.Entry<String, List<String>> entry : lists.entrySet()) { 
     if(entry.getValue().contains(str1) && entry.getValue().contains(str2)) { 
      found = true; 
      System.out.println(new StringBuilder() 
      .append("str1 found at index:") 
      .append(entry.getValue().indexOf(str1)) 
      .append(", str2 found at index:") 
      .append(entry.getValue().indexOf(str2)) 
      .append(" in list ") 
      .append(entry.getKey()).toString()); 
     } 
    } 
    if(!found) { 
     System.out.println("Not Found"); 
    } 
+0

文字列は、私はあなたの答えが好きな私の更新 –

+0

を発見された場合、インデックスを返しません。) –

+0

をご覧ください –

0

あなたは、リストごとにそれを行うことができます。両方のstringSが含まれているかどうか調べ、その場合はyesを返します。しかし、リストをトラバースしながらその位置を保存しなければならないので、そのインデックスを返すことができます。私はリストのそれぞれを見るだろう。

List<List<String> listOfLists = new ArrayList<List<String>(); 
// add all lists 
listofLists.add(list1); 
listofLists.add(list2); 
listofLists.add(list3); 

for (List l : listOfLists){ 
    int index1 = -1; 
    int index2 = -1; 
    for (String s : l){ 
     index++; 
     if (s.equalsIgnoreCase(str1)){ 
     index1= index; 
     } 
     if (s.equalsIgnoreCase(str1)){ 
     index2= index; 
     } 
     if (index1 > -1 && index2 > -1){ 
     log.info("found both strings at" + index1 + " and " + index2); 
     } else { 
     log.info("did not found both input strings in a single list"); 
     } 
    } 
} 
+0

は文句を言わない、それが結果リスト内のリストを置きます誰かが私に言った非常に悪い性能誰かが私に言ったb4 – ProgrammerToBe

+0

彼は信じていない;) –

0
 List<String> list1 = Arrays.asList("apples", "oranges"); 
     List<String> list2 = Arrays.asList("tomato", "potato"); 
     List<String> list3 = Arrays.asList("meat", "tuna"); 

     Scanner in = new Scanner(System.in); 
     String str1 = in.nextLine(); 
     String str2 = in.nextLine(); 
     System.out.println(str1+(list1.contains(str1)? " in list1":list2.contains(str1)? " in list2":list3.contains(str1)?" in list3":" not found")); 
     System.out.println(str2+(list1.contains(str2)? " in list1":list2.contains(str2)? " in list2":list3.contains(str2)?" in list3":" not found")); 

EDIT:

public static void main(String[] args){ 
     List<String> list1 = Arrays.asList("apples", "oranges"); 
     List<String> list2 = Arrays.asList("tomato", "potato"); 
     List<String> list3 = Arrays.asList("meat", "tuna"); 

     Scanner in = new Scanner(System.in); 
     String str1 = in.nextLine(); 
     String str2 = in.nextLine(); 
     System.out.println(searchInLists(str1,list1,list2,list3)); 
     System.out.println(searchInLists(str2,list1,list2,list3)); 
    }   

    private static String searchInLists(String strToSearch, List<String> ...lists) { 
     for(int i = 0; i<lists.length; i++){ 
      if(lists[i].contains(strToSearch)) 
       return "in list"+ (i+1) +" at index "+ lists[i].indexOf(strToSearch);      
     } 
     return "not found"; 
    } 
+0

投稿されたコードとはどのように違うのですか – ProgrammerToBe

+0

違いはありません。 if elseを作るもう一つの方法。私はあなたの質問を忘れてしまった。私は私の答えを編集し、別の方法を追加します。 – Eritrean

関連する問題