我是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+ " ");
}
有人可以向我解释这些错误的含义吗?
答案 0 :(得分:4)
for-each循环的使用不正确:
for(String list1: list)
这一行有两个问题:
list1
类型的新变量名String
,但您已在范围内拥有此类变量名称。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 :(得分:1)
您已在list
循环中交换了list1
和list2
(以及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(" ")));
}
}