如何遍历ArrayList实现每行输出3个元素?
解决ArrayList每行输出3个元素的问题
我来帮你搞定这个每行打印3个学生ID的需求~你之前遇到的问题主要是格式化字符串的参数数量不匹配,咱们一步步来调整:
问题分析
你之前尝试的printf写法用了需要3个参数的格式串%-5s %-5s %s %n,但每次循环只传入一个学生ID,这会导致参数数量不匹配的异常(不是空指针哦,除非你的studentList里存在null的Student对象,调用getStudentId()时才会触发空指针)。而且这种写法也没办法控制每行3个的换行逻辑。
解决方案
我们可以通过计数跟踪的方式来实现每行3个元素的输出,这里提供两种常用写法:
方法1:带索引的普通for循环
这种方式通过索引直接跟踪当前元素的位置,判断何时换行:
System.out.println("List of Student IDs:"); // 单个元素的格式化串,保证每个ID占5个字符宽度 String format = "%-5s "; for (int i = 0; i < studentList.size(); i++) { Student s = studentList.get(i); // 处理可能的null对象,避免空指针 if (s != null) { System.out.printf(format, s.getStudentId()); } else { System.out.printf(format, "N/A"); } // 每3个元素换行(注意是i+1,因为索引从0开始) if ((i + 1) % 3 == 0) { System.out.println(); } } // 如果最后一行元素不足3个,补充换行保证格式整洁 if (studentList.size() % 3 != 0) { System.out.println(); }
方法2:增强for循环+计数器
如果更喜欢用增强for循环,可以加一个计数器来记录已打印的元素数量:
System.out.println("List of Student IDs:"); String format = "%-5s "; int printCount = 0; for (Student s : studentList) { printCount++; if (s != null) { System.out.printf(format, s.getStudentId()); } else { System.out.printf(format, "N/A"); } // 每打印3个元素换行 if (printCount % 3 == 0) { System.out.println(); } } // 处理最后一行不足3个的情况 if (printCount % 3 != 0) { System.out.println(); }
效果说明
这两种写法都会输出类似这样的格式:
List of Student IDs: 1001 1002 1003 1004 1005 1006 1007
内容的提问来源于stack exchange,提问作者Kim SuYu
相关产品推荐
相关产品推荐

