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

Java成绩册程序:如何调整二维数组输出值的右对齐间距

Java成绩册格式调整解决方案

问题说明

正在完成课堂作业,编写一个包含5名学生两门考试成绩的Java成绩册程序,最终要支持打印学生个人平均分或班级单科平均分。当前用printf输出学生姓名与成绩时,没法实现成绩数值右对齐且间距均匀的效果,需要调整代码达到目标格式。

期望输出

Adams       75 75 
Baker      100 75 
Campbell    84 75 
Dewey       80 75 
East        50 75 

现有代码

import java.util.*;
import java.io.*;

public class GradeBook
{

    public static void main(String[] args) 
    {
        System.out.println("Starting program\n\n");
        String[] STUDENT_NAMES = new String[] {"Adams", "Baker", "Campbell", "Dewey", "East"};
        int[][] STUDENT_GRADES = new int[5][3];
        
        loadGradeArray(STUDENT_GRADES);
        
        for (int i = 0; i < STUDENT_NAMES.length; i++) 
        {
            System.out.printf("%s %d %d \n", STUDENT_NAMES[i], STUDENT_GRADES[i][0], STUDENT_GRADES[i][1]);
        }
            
        
    } //end main
    
    public static void loadGradeArray(int[][] STUDENT_GRADES)
    {
        for(int row = 0; row<STUDENT_GRADES.length; row++)
        {
            for(int col = 0; col<STUDENT_GRADES[row].length; col++)
            {
                STUDENT_GRADES[0][0] = 75;
                STUDENT_GRADES[0][1] = 75;
                STUDENT_GRADES[1][0] = 100;
                STUDENT_GRADES[1][1] = 75;
                STUDENT_GRADES[2][0] = 84;
                STUDENT_GRADES[2][1] = 75;
                STUDENT_GRADES[3][0] = 80;
                STUDENT_GRADES[3][1] = 75;
                STUDENT_GRADES[4][0] = 50;
                STUDENT_GRADES[4][1] = 75;
            }
        }
    }
}

修改步骤

  1. 调整printf格式化字符串:

    • 姓名部分用%-12s:-表示左对齐,12是固定宽度,确保所有姓名占满统一宽度,让后续成绩能对齐。
    • 成绩部分用%4d:4是固定宽度,让成绩右对齐,即使是三位数的100也能和其他成绩保持一致的间距。
      修改后的输出语句为:System.out.printf("%-12s %4d %4d%n", STUDENT_NAMES[i], STUDENT_GRADES[i][0], STUDENT_GRADES[i][1]);
  2. 优化成绩加载方法:
    原loadGradeArray里的嵌套循环完全多余,每次循环都重复给数组赋值,直接去掉循环,直接给数组元素赋值即可,减少冗余代码。

修改后完整代码

import java.util.*;
import java.io.*;

public class GradeBook
{

    public static void main(String[] args) 
    {
        System.out.println("Starting program\n\n");
        String[] STUDENT_NAMES = new String[] {"Adams", "Baker", "Campbell", "Dewey", "East"};
        int[][] STUDENT_GRADES = new int[5][3];
        
        loadGradeArray(STUDENT_GRADES);
        
        for (int i = 0; i < STUDENT_NAMES.length; i++) 
        {
            // 调整格式化字符串实现左对齐姓名、右对齐成绩
            System.out.printf("%-12s %4d %4d%n", STUDENT_NAMES[i], STUDENT_GRADES[i][0], STUDENT_GRADES[i][1]);
        }
            
        
    } //end main
    
    public static void loadGradeArray(int[][] STUDENT_GRADES)
    {
        // 去掉多余循环,直接赋值
        STUDENT_GRADES[0][0] = 75;
        STUDENT_GRADES[0][1] = 75;
        STUDENT_GRADES[1][0] = 100;
        STUDENT_GRADES[1][1] = 75;
        STUDENT_GRADES[2][0] = 84;
        STUDENT_GRADES[2][1] = 75;
        STUDENT_GRADES[3][0] = 80;
        STUDENT_GRADES[3][1] = 75;
        STUDENT_GRADES[4][0] = 50;
        STUDENT_GRADES[4][1] = 75;
    }
}

内容的提问来源于stack exchange,提问作者b-rad90

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 06:40:20