如何在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方法的调用不能作为表达式参与字符串拼接。
解决方案
只需要两个关键改动,顺便还能优化代码里的小问题:
- 把
display方法改成void类型:这个方法的职责就是打印表格内容,完全不需要返回任何值。 - 单独调用
display方法:不要把它嵌套在System.out.println里,直接在main中单独调用,同时调整表头的打印逻辑。 - 优化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
相关产品推荐
相关产品推荐

