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

如何在Java中用无返回值函数表格打印数组并消除null输出?

解决Java数组表格打印末尾出现null且无返回类型方法报错的问题

我来帮你搞定这个问题!你现在遇到的核心问题有两个:一是display方法返回null导致输出末尾多了这个冗余值,二是想把方法改成无返回类型(void)但不知道怎么调整调用逻辑避免报错。

问题根源

你当前在main方法里是这么调用display的:

System.out.println("Content of Array: " + (display(ID, Name, Salary)));

因为display返回null,字符串拼接时就会把这个null也打印出来。而如果直接把display改成void,这条语句会直接报错——因为void方法的调用不能作为表达式参与字符串拼接。

解决方案

只需要两个关键改动,顺便还能优化代码里的小问题:

  1. 把display方法改成void类型:这个方法的职责就是打印表格内容,完全不需要返回任何值。
  2. 单独调用display方法:不要把它嵌套在System.out.println里,直接在main中单独调用,同时调整表头的打印逻辑。
  3. 优化Scanner使用:不需要创建三个Scanner实例,一个就足够处理所有输入,避免不必要的资源消耗和潜在问题。

修改后的完整代码

import java.util.Scanner;

public class MultiDArray {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        
        // 输入ID数组
        System.out.println("How many rows?");
        int length = input.nextInt();
        int[] ID = new int[length];
        for(int counter = 0; counter < length; counter++) {
            System.out.println("Enter ID number "+(counter+1));
            ID[counter] = input.nextInt();
        }
        
        // 输入Name数组(复用length,保证表格行一致,避免数组越界)
        String[] Name = new String[length];
        for(int counter = 0; counter < length; counter++) {
            System.out.println("Enter Name "+(counter+1));
            Name[counter] = input.next();
        }
        
        // 输入Salary数组(同样复用length)
        int[] Salary = new int[length];
        for(int counter = 0; counter < length; counter++) {
            System.out.println("Enter Salary "+(counter+1));
            Salary[counter] = input.nextInt();
        }
        
        input.close();
        
        // 打印表头和表格内容
        System.out.println("ID  Name  Salary");
        System.out.println("----------------");
        display(ID, Name, Salary); // 单独调用void方法,无返回值也不会报错
    }
    
    // 修改为void类型,直接完成打印逻辑
    public static void display(int x[], String y[], int z[]) {
        for (int i = 0; i < x.length; i++) {
            // 用printf格式化输出,让表格更整齐
            System.out.printf("%-3d %-6s %d%n", x[i], y[i], z[i]);
        }
    }
}

关键改动说明

  • display改为void类型:去掉了无用的return null;,方法专注于打印任务,符合单一职责原则。
  • 单独调用display:在main里直接写display(ID, Name, Salary);,避免了把void方法调用作为表达式的错误,同时也不会再输出末尾的null。
  • 统一使用一个Scanner:原来的三个Scanner完全没必要,一个实例就能处理所有输入,还能避免多Scanner关闭时的潜在问题。
  • 表格对齐优化:用printf代替println,通过格式化字符串让ID、Name、Salary的列对齐,输出更美观。
  • 统一数组长度:原来的代码允许三个数组长度不同,会导致遍历时报ArrayIndexOutOfBoundsException,现在统一用length作为数组长度,保证表格行一致。

这样修改后,运行程序就只会输出干净的表格内容,不会有末尾的null,同时display是void类型也不会触发报错啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:48:53