使用增强的foor循环打印arraylist - 错误:找不到方法中已定义的符号和变量

时间:2017-06-04 05:13:41

标签: java arraylist

我是java新手,我正在尝试编写一个方法,使用增强的for循环打印出一个ArrayList。每当我编译时,前循环都会给我以下错误:

  

错误:找不到符号

     

错误:变量list2已在中定义      方法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+ " ");
}

有人可以向我解释这些错误的含义吗?

2 个答案:

答案 0 :(得分:4)

for-each循环的使用不正确:

for(String list1: list)

这一行有两个问题:

  1. 由于错误说您正在尝试定义list1类型的新变量名String,但您已在范围内拥有此类变量名称。
  2. 没有定义为list。基本上语法是:for(#item : #collection)
  3. 您正在寻找类似

    的内容
    for(String item : list1)
    

    详细了解How does the Java 'for each' loop work?

    打印清单的更好方法是使用String.join here

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

答案 1 :(得分:1)

您已在list循环中交换了list1list2(以及for-each)。但是,我建议您先编程到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(" ")));
    }
}