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

Java打印学生平均成绩时如何调整输出格式使所有首行文本对齐

问题原因分析

对齐异常的根源在printGradeAverage方法的输出逻辑:两个打印分支末尾都输出了\n (换行符+1个额外空格),这个空格会被追加到下一行内容的开头。首次打印Piet van Gogh的成绩前没有多余的前导空格,后续所有学生的成绩行开头都多了1个上一次打印遗留的空格,所以Piet的行看起来比其他行偏左1个字符的宽度。

修复方案

最优方案:从根源消除多余空格(推荐)

直接删掉printGradeAverage方法中换行符后的多余空格即可让所有行自然对齐,代码修改如下:

void printGradeAverage(double mathScoreAverage) {
    if(mathScoreAverage >= 5.5 && mathScoreAverage < 6) {
        // 删掉\n后面的空格
        out.printf("6-\n");
    } else  {
        // 删掉\n后面的空格
        out.printf("%.1f\n", Math.round(mathScoreAverage*2)*0.5);
    }
}

如果希望所有成绩行统一增加固定缩进,可以在printStudentName的格式化字符串开头统一加指定数量的空格,比如要4个空格缩进的话修改为:

void printStudentName(Scanner studentNameScanner) {
    String studentName = scannerToStringLine(studentNameScanner);
    // 开头加4个空格统一缩进
    out.printf("    %s has an average grade of: ", studentName);
}

临时方案:仅微调Piet行的位置(不推荐,硬编码适配灵活性差)

如果不想修改原有输出逻辑,只想单独把Piet的行向右移1个字符,可以在打印姓名时加判断补空格:

void printStudentName(Scanner studentNameScanner) {
    String studentName = scannerToStringLine(studentNameScanner);
    if ("Piet van Gogh".equals(studentName)) {
        // 姓名前补1个空格
        out.printf(" %s has an average grade of: ", studentName);
    } else {
        out.printf("%s has an average grade of: ", studentName);
    }
}
补充说明

之前用tab调整无效是因为tab的缩进宽度远大于1个字符,整体偏移后反而和预期对齐位置不符,优先选根源修复的方案即可。

内容的提问来源于stack exchange,提问作者Weightlifting Without Limits

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 02:54:01