Java专辑收藏管理器执行add方法后Album数组与numAlbums值重置问题
故障常见原因及排查方案
1. 变量作用域错误
这是最高发的原因:你大概率把numAlbums计数变量、Album存储数组定义在了add方法内部,而非类的成员变量。
方法内的局部变量会在方法执行完成后直接销毁,每次调用方法都会重新初始化,自然无法保留修改结果。
正确写法参考:
public class Collection { // 存储数组和计数统一声明为类的成员变量 private Album[] albumList = new Album[100]; // 容量可根据需求调整 private int numAlbums = 0; public void add(Album newAlbum) { // 不要在这里重新声明同名的numAlbums或albumList变量 albumList[numAlbums] = newAlbum; numAlbums++; } // 提供getter方法访问成员变量 public int getNumAlbums() { return numAlbums; } public Album[] getAlbumList() { return albumList; } }
2. Collection实例重复创建
如果你的Collection对象是在addAlbum触发逻辑里临时实例化的,每次调用添加方法都会生成一个全新的空Collection对象,之前存储的内容自然会丢失。
错误写法示例:
public class CollectionManager { public void addAlbum(Album album) { // 每次调用都新建Collection,之前的存储内容全部失效 Collection collection = new Collection(); collection.add(album); } }
正确写法参考:
public class CollectionManager { // 将Collection声明为Manager的成员变量,全局仅初始化一次 private Collection collection = new Collection(); public void addAlbum(Album album) { collection.add(album); } public void printAlbums() { System.out.println("总专辑数:" + collection.getNumAlbums()); // 遍历collection.getAlbumList()打印即可 } }
3. 值传递导致修改未生效
如果你是把Collection作为参数传入add方法,注意不要在方法内部给Collection形参重新赋值新对象,值传递场景下形参的重新赋值不会影响方法外的原对象。
内容的提问来源于stack exchange,提问作者Vearaa
相关产品推荐
相关产品推荐

