首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java中的数组索引越界错误

Java中的数组索引越界错误
EN

Stack Overflow用户
提问于 2013-12-05 01:37:57
回答 2查看 379关注 0票数 1
代码语言:javascript
复制
package test1;

import java.util.Scanner;

public class Question2 {

    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);
        int traincars;
        int maxweight;
        int count = 0;
        int total = 0;

        maxweight = input.nextInt();
        traincars = input.nextInt();
        int[] trains = new int[traincars];

        for(int i = 0; i < traincars; i++)
        {
            trains[i] = input.nextInt();
        }

        if (total < maxweight)
        {
            for(int i = 0; i < traincars; i++)
            {
                total = trains[i] + trains[i+1] + trains[i+2] + trains[i+3];
                count++;
            }
        }else
        {
            count = count + 3;
        }
System.out.println("count");
    }
}

这是一个非常简单的程序,但由于某种原因,火车的数组超出了范围。

为什么会发生这种情况?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-05 01:49:03

在最后一次迭代中

代码语言:javascript
复制
        for(int i = 0; i < traincars; i++)
        {
            total = trains[i] + trains[i+1] + trains[i+2] + trains[i+3];
            count++;
        }

您尝试访问trains[i+1],这比trains数组的长度要大。

要使这个for循环变得重要,只需执行以下操作:

代码语言:javascript
复制
        for(int i = 0; i < traincars; i++)
        {
            total += trains[i]; //unless of course you need something else...
            count++;
        }
票数 1
EN

Stack Overflow用户

发布于 2013-12-05 01:50:50

问题在于:

代码语言:javascript
复制
        for(int i = 0; i < traincars; i++)
        {
            total = trains[i] + trains[i+1] + trains[i+2] + trains[i+3];
            count++;
        }

i等于traincars-1时,您将访问元素i+1i+2。和i+3,它们超出了trains数组的范围。

如果您的逻辑要求计算数组中4个连续元素的总和,那么您的for循环应该提前停止:

代码语言:javascript
复制
for(int i = 0; i < traincars - 3; i++) {...}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20389761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档