2017-07-31 148 views
-4

我正在製作這個應用程序,其中有三個列表。用戶輸入兩個字符串,現在應用程序應該看看兩個字符串是否在同一個列表中。如果是這樣,它應該告訴用戶他們在同一個列表中,並打印出兩者的索引。否則,它應該告訴用戶列表中的字符串是哪個列表,並且它的索引在列表中是相同的,而對於字符串二是相同的。搜索列表中的元素,如果沒有找到,則在另一個列表中搜索

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

你可以做到這一點每個列表。看看是否包含這兩個字符串,並在這種情況下返回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")); 

編輯:

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

沒有什麼區別。另一種方式來做一個如果其他的。我錯過了你的問題。我將編輯我的答案並添加另一種方式。 – Eritrean