【问题标题】:Trouble with nested for loops and arrays index out of bounds exception [duplicate]嵌套for循环和数组索引超出范围异常的问题[重复]
【发布时间】:2021-04-16 13:33:43
【问题描述】:

我正在为老式电话套餐编写 Java 代码,所以我有:

  • 乐队类:public Band(LocalTime startTime, LocalTime endTime, DayOfWeek[] combinedDays, double intervalCost)
  • 速率类:public Rate(String name, Band[] bands, int intervalMs, double startCost, String numberRoot)

我想在 Rate 类中编写一个 private Band[] selectBandsInDay(DayOfWeek day) 方法,给定一周中的某一天,返回一个由一周中的那一天的波段组成的 Band 数组。

我写的是:

private Band[] selectBandsInDay(DayOfWeek day) {
        
        Band[] bandsInDay = new Band[bands.length];
        int size = 0;
        
        for (int i=0; i<bands.length; i++) {
            for (int j=0; j<bands.length; j++) {
                if (bands[j].getCombinedDays()[i] == day) {
                bandsInDay[size] = bands[i];
                size++;
                }
            }
        }       
        return bandsInDay;
    }

但我不断收到索引超出范围异常(索引 2 超出长度 2 的范围)。

我该如何解决这个问题?

【问题讨论】:

  • getCombinedDays() 返回什么?哪一行抛出异常?你调试过你的代码吗?
  • size 在这里可能是个问题。一旦i 增加,size 是否应该重置为 0?
  • getCombinedDays() 返回 Band 类的 combineDays 参数,是 DayOfWeek 的数组。 if (bands[j].getCombinedDays()[i] == day) { 行正在抛出异常。
  • @firsttry 它不应该,但我怎样才能避免它重置为 0?
  • 两个循环都使用外部数组的长度来确定何时停止。您可能需要将 j&lt;bands.length 更改为 j&lt;bands[i].getCombinedDays().length

标签: java arrays for-loop


【解决方案1】:

我不得不采用不同的方法。

private Band[] selectBandsInDay(DayOfWeek day) {
        
        int i = 0;
        int length = 0;
        for (Band band : bands) {
            if(DayOfWeekHelper.isDayIn(day, band.getCombinedDays()))
                length++;
        }
        Band[] bands_1 = new Band[length];
        for (Band band : bands) {
            if(DayOfWeekHelper.isDayIn(day, band.getCombinedDays()))
                bands_1[i++] = band;
        }
        return bands_1;
    }

我使用 isDayIn() 方法创建了 DayOfWeekHelper 类:

public class DayOfWeekHelper {
    public static boolean isDayIn(DayOfWeek day, DayOfWeek[] combinedDays) {
        for (DayOfWeek d : combinedDays) {
            if (d == day)  {
                return true;
            }
        }
        return false;
    }
}

【讨论】:

    猜你喜欢
    • 2013-11-25
    • 1970-01-01
    • 2022-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-11
    • 1970-01-01
    • 2017-06-01
    相关资源
    最近更新 更多