for循环多数组存储异常:电影周末票房计算代码求助
搞定电影票房代码里的多数组存储问题
嘿,我之前也踩过类似的平行数组同步坑,你这情况一猜就知道是多个数组不同步或者操作越界搞的鬼——毕竟把String[]和int[]绑在一起用,很容易顾此失彼,删掉它们就正常也印证了这一点。下面给你拆解问题和解决办法:
先揪出常见的数组问题根源
- 下标越界异常:比如你遍历电影名称数组时,循环次数超过了成本/预期票房数组的长度,或者某个数组初始化长度不对,添加数据时没同步扩容,直接就会抛出
ArrayIndexOutOfBoundsException。 - 数据不同步:比如你给电影名称数组加了新元素,但忘了给成本或预期票房数组同步添加,导致后续读取时出现数据错位或者逻辑上的错误(int数组默认值是0,但这显然不符合你的业务逻辑)。
更靠谱的方案:用类封装关联数据
其实用多个平行数组存储关联数据本来就是反模式,不如直接把每部电影的所有信息打包成一个类,清晰还不容易出错。给你写个简单的示例:
// 封装每部电影的票房相关数据 class MovieBoxOfficeData { private String movieName; private int productionCost; private int expectedWeekendBoxOffice; // 构造方法,一次性传入所有数据 public MovieBoxOfficeData(String name, int cost, int expected) { this.movieName = name; this.productionCost = cost; this.expectedWeekendBoxOffice = expected; } // 可以直接在这里写计算票房表现的方法,比如预期回报率 public double calculatePerformance() { return (double) expectedWeekendBoxOffice / productionCost * 100; } // Getter方法,方便输出数据 public String getMovieName() { return movieName; } public int getProductionCost() { return productionCost; } public int getExpectedWeekendBoxOffice() { return expectedWeekendBoxOffice; } }
然后用集合来存这些对象,操作起来比数组灵活多了:
import java.util.ArrayList; public class BoxOfficeCalculator { public static void main(String[] args) { ArrayList<MovieBoxOfficeData> movieList = new ArrayList<>(); // 添加电影数据 movieList.add(new MovieBoxOfficeData("流浪地球2", 500000000, 2000000000)); movieList.add(new MovieBoxOfficeData("满江红", 50000000, 4500000000)); // 输出所有信息和票房表现 for (MovieBoxOfficeData movie : movieList) { System.out.println("【电影名称】:" + movie.getMovieName()); System.out.println("【使用成本】:" + movie.getProductionCost() + "元"); System.out.println("【周末预期票房】:" + movie.getExpectedWeekendBoxOffice() + "元"); System.out.println("【票房表现预期率】:" + String.format("%.2f%%", movie.calculatePerformance())); System.out.println("--------------------------"); } } }
要是非得用数组怎么办?
如果你坚持要用平行数组,那一定要盯死所有数组的长度完全一致:
- 初始化时,所有数组用相同的初始长度;
- 添加新数据时,必须同时给所有数组扩容(比如用
Arrays.copyOf来扩展长度); - 遍历时,用同一个循环条件(比如
for(int i=0; i<movieNames.length; i++)),绝对不能用不同的长度来循环。
按这个思路调整,应该就能解决你现在的问题了。个人还是更推荐用类封装的方式,后续加新字段(比如实际票房、排片率)也方便维护~
内容的提问来源于stack exchange,提问作者TΞRRΛORBΛ
相关产品推荐
相关产品推荐

