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
相关产品推荐
相关产品推荐

