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

Java跨方法展示while循环录入数组遇null问题及列对齐实现

学生信息管理程序问题修复方案

问题1:数组展示出现null值的修复

原因分析

  • 类中定义的静态变量subj是单个String类型,unit是单个int类型,无法存储多个科目/学分;
  • academicinfo()和academicunit()方法中重新定义了局部数组变量,覆盖了类的静态变量,导致静态变量未被赋值,最终展示时输出null和默认值0。

修复步骤

  1. 修正静态变量类型:将类中的静态变量修改为数组类型:
static String lname, fname, mname, program;
static String[] subj; // 改为字符串数组存储多个科目
static int studentno;
static int[] unit; // 改为int数组存储多个学分
  1. 移除方法内的局部数组定义:在academicinfo()和academicunit()中,直接初始化类的静态数组,不再定义局部变量:
// academicinfo()修改后
static void academicinfo() {
    Scanner sc = new Scanner(System.in);
    subj = new String[8]; // 初始化静态科目数组
    System.out.print("Program: ");
    program = sc.nextLine();
    System.out.println("Courses: ");
    int i = 0;
    while (i < subj.length) {
        subj[i] = sc.nextLine();
        i++;
    }
}

// academicunit()修改后
static void academicunit() {
    Scanner sc = new Scanner(System.in);
    unit = new int[8]; // 初始化静态学分数组
    System.out.println("Units in corresponding order");
    int i = 0;
    while (i < unit.length) {
        unit[i] = sc.nextInt();
        i++;
    }
    sc.nextLine(); // 处理输入int后的换行符,避免后续输入异常
}

问题2:实现科目与学分列对齐

实现方式

使用System.out.printf()格式化输出,通过指定字符串宽度实现列对齐。%-30s表示左对齐、占30个字符宽度,%d用于输出整数学分。

修改finaloutput()方法

static void finaloutput() {    
    System.out.println("PERSONAL INFORMATION");
    System.out.println("\tStudent No. " + studentno);
    System.out.println("\tLast Name: " + lname);
    System.out.println("\tFirst Name: " + fname);
    System.out.println("\tMiddle Name: " + mname);
    
    System.out.println("\nACADEMIC INFORMATION");
    System.out.println("Program: " + program);
    // 格式化输出表头和内容
    System.out.printf("%-30s %s%n", "Courses:", "Units:");
    for (int i = 0; i < subj.length; i++) {
        // 处理未输入的科目(避免null显示)
        String course = subj[i] == null ? "" : subj[i];
        System.out.printf("%-30s %d%n", course, unit[i]);
    }
}

修改后的完整代码

package com.mycompany.studentinfo;
import java.util.Scanner;

public class StudentInfo {   
    static String lname, fname, mname, program;
    static String[] subj;
    static int studentno;
    static int[] unit;
    
    public static void main(String[] args){
        student();
        academicinfo();
        academicunit();
        finaloutput();
    }

    static void student() {
        try {
            System.out.println("***PROVIDE THE FOLLOWING***");
            Scanner sc = new Scanner(System.in);
            System.out.print("Student No: ");
            studentno = sc.nextInt();
            String xd = sc.nextLine();  // 处理nextInt后的换行符
            System.out.print("Last Name: ");
            lname = sc.nextLine();
            System.out.print("First Name: ");
            fname = sc.nextLine();
            System.out.print("Middle Name: ");
            mname = sc.nextLine();
        } catch (Exception x){
            System.out.println("***ERROR***");
            student();
        }
    }
    
    static void academicinfo() {
        Scanner sc = new Scanner(System.in);
        subj = new String[8];
        System.out.print("Program: ");
        program = sc.nextLine();
        System.out.println("Courses: ");
        int i = 0;
        while (i < subj.length) {
            subj[i] = sc.nextLine();
            i++;
        }
    }
    
    static void academicunit() {
        Scanner sc = new Scanner(System.in);
        unit = new int[8];
        System.out.println("Units in corresponding order");
        int i = 0;
        while (i < unit.length) {
            unit[i] = sc.nextInt();
            i++;
        }
        sc.nextLine();
    }
             
    static void finaloutput() {    
        System.out.println("PERSONAL INFORMATION");
        System.out.println("\tStudent No. " + studentno);
        System.out.println("\tLast Name: " + lname);
        System.out.println("\tFirst Name: " + fname);
        System.out.println("\tMiddle Name: " + mname);
        
        System.out.println("\nACADEMIC INFORMATION");
        System.out.println("Program: " + program);
        System.out.printf("%-30s %s%n", "Courses:", "Units:");
        for (int i = 0; i < subj.length; i++) {
            String course = subj[i] == null ? "" : subj[i];
            System.out.printf("%-30s %d%n", course, unit[i]);
        }
    }
}

内容的提问来源于stack exchange,提问作者myNameShu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 00:01:12