2017-06-04 17 views
0

我是java新手,正在嘗試編寫一個方法,使用增強for循環打印出ArrayList。每當我編譯,脫穎而出環給了我以下錯誤:用增強的foor循環打印arraylist - 錯誤:找不到方法中已經定義的符號和變量

error: cannot find symbol

error: variable list2 is already defined in method printLists(ArrayList,ArrayList) for(String list2: list)

public static void printLists(ArrayList <String> list1, ArrayList <String> list2) 
{ 
    System.out.println("list1.txt contains:"); 
    for(String list1: list) 
     System.out.println(list1+ " "); 

    System.out.println("list2.txt contains:"); 
    for(String list2: list) 
     System.out.println(list2+ " "); 
} 

可有人請給我解釋一下這些錯誤是什麼意思?

回答

4

的使用for-each循環是不正確的:

for(String list1: list) 

兩個問題這一行:

  1. 由於錯誤說你試圖定義String類型的新變量名list1但在範圍中已經有了這樣一個變量名稱。
  2. 沒有什麼定義爲list。基本語法是:for(#item : #collection)

您正在尋找的東西像

for(String item : list1) 

瞭解更多關於How does the Java 'for each' loop work?


一個更好的方法來打印清單將使用String.join所見here

System.out.println(String.join(" ", list1)); 
+1

感謝您的回答和澄清!我會檢查鏈接,並在時間鎖定結束後接受它:)。 – starlight

+0

@starlight - 歡迎您:)讓我知道它是怎麼回事:) –

1

您已在for-each循環中交換了listlist1(和list2)。但是,我會首先建議您編程到List界面。假設你使用的是Java 8+,我寧願選擇stream()的內容,然後加入Collector。像,

public static void printLists(List<String> list1, List<String> list2) { 
    System.out.printf("list1.txt contains: %s%n", list1.stream() 
      .collect(Collectors.joining(" "))); 
    System.out.printf("list2.txt contains: %s%n", list2.stream() 
      .collect(Collectors.joining(" "))); 
} 

可能使論點variadic和通用(所以它可以採取任何數量的List小號任何類型的)像

@SafeVarargs 
public static <T> void printLists(List<T>... lists) { 
    for (int i = 0; i < lists.length; i++) { 
     System.out.printf("list%d.txt contains: %s%n", i + 1, 
       lists[i].stream().map(Object::toString).collect(
         Collectors.joining(" "))); 
    } 
}