微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

索引 12 超出长度 12 的范围我该如何解决这个问题?

如何解决索引 12 超出长度 12 的范围我该如何解决这个问题?

每次我运行代码时,我都会得到一个长度为 12 的索引 12 超出范围。我不确定是什么问题。 代码如下:

enter code here: int getDayNumber(int day,int month,int year) {
    if(this.leapYear(year)) {
        int months[] = {31,29,31,30,31};
        int cnt = 0 ;
        for(int i=0;i<month-1;i++) {
            cnt += months[i];
            System.out.println(cnt + "   " + i);
        }
        return cnt + day ; // count = cnt

   

enter image description here

解决方法

您在循环中使用的 (month - 1) 指向函数 getDayNumber 中参数中传递的月份。考虑使用 .length 函数来计算数组的长度。尝试使用 for 循环,例如:

for(int i = 0 ; i < months.length ; i++)

您对 Array 工作原理的概念非常清楚!只需使用months.length 就可以了。告诉我这对你有什么影响!

,
    package projectlearn1;

public class ArrayQueue {
    private int[] mArray;
    private int mCount;

    public ArrayQueue(int sz) {
        mArray=new int[sz];
        mCount=0;
    }

    public void add(int val){
        mArray[mCount++]=val;
    }

    public int front(){
        return mArray[0];
    }

    public int pop(){
        int ret=mArray[0];
        mCount--;
        for (int i = 0; i < mCount; i++) {
            mArray[i-1]=mArray[i];
        }
        return ret;
    }
    public int size(){
        return mCount;
    }

    public boolean isEmpty(){
        return size()==0;
    }

    public static void main(String[] args) {
        int tmp=0;
        ArrayQueue astack=new ArrayQueue(12);
        astack.add(10);
        astack.add(20);
        astack.add(30);

        tmp=astack.pop();
        System.out.printf("tmp=%d\n",tmp);

        tmp=astack.front();
        System.out.printf("tmp=%d\n",tmp);

        astack.add(40);

        System.out.printf("isEmpty()=%b\n",astack.isEmpty());
        System.out.printf("size()=%d\n",astack.size());
        while (!astack.isEmpty()){
            System.out.printf("size()=%d\n",astack.pop());
        }
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。