2017-07-31 64 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

相关问题