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

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Λ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:14:13