Java如何通过getter打印ArrayList中存储的String数组内容并解决相关报错?
问题根因
- 类型不匹配报错的核心原因:
Arrays.toString(coursesList)的返回值是String类型,但你定义的getCourses()方法返回值声明为String[],二者类型不匹配导致编译报错。 - 数组打印显示内存地址的核心原因:Java数组的默认
toString()方法继承自Object类,输出格式为[类型@哈希值],不会输出数组内部的实际内容。 - 直接打印对象仅显示部分信息的原因:你没有重写
NewRegandLogin类的toString()方法,默认的对象toString方法仅会输出类名和哈希值,你看到的姓名、ID信息如果是已有的输出,说明你写了部分toString逻辑但没有包含课程数组的格式化处理。
修复方案
1. 修正getter方法
二选一即可:
方案A:保留数组返回值
如果业务需要返回原始数组做后续处理,修改getter为:
// 注意导入java.util.Arrays public String[] getCourses() { return coursesList; }
方案B:改为返回格式化字符串
如果getter仅用于打印场景,直接返回格式化后的字符串即可:
// 注意导入java.util.Arrays public String getCourses() { // 先过滤掉空元素和终止输入的S/s,再格式化 int validLength = 0; for (String course : coursesList) { if (course == null || course.equalsIgnoreCase("s")) { break; } validLength++; } String[] validCourses = Arrays.copyOf(coursesList, validLength); return Arrays.toString(validCourses); }
2. 完善toString方法
在NewRegandLogin类中添加重写的toString方法,统一格式化对象输出内容:
@Override public String toString() { // 如果选了方案A,这里把getCourses()替换为Arrays.toString(getCourses())即可 return "Alumni Name: " + alumniFirstName + " " + alumniLastName + "\n" + "Alumni ID: " + alumniId + "\n" + "Courses completed: " + getCourses(); }
3. 可选优化:修复课程存储冗余问题
你现有代码会把终止输入的S/s也存入课程数组,可修改setAlumniCourses逻辑避免冗余:
public void setAlumniCourses() { coursesList = new String[10]; for (int i=0; i < coursesList.length; i++) { System.out.println("Completed Course Name: "); String input = scanner.next(); if(input.equalsIgnoreCase("s")) { break; } coursesList[i] = input; } }
最终效果
修改后运行程序,课程部分会输出类似Courses completed: [Java, Python, MySQL]的可读内容,不会再出现内存地址,类型不匹配的编译报错也会消失。
内容的提问来源于stack exchange,提问作者Geri Glazer
相关产品推荐
相关产品推荐

