You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何遍历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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:41:51