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");
}
}这是一个非常简单的程序,但由于某种原因,火车的数组超出了范围。
为什么会发生这种情况?
发布于 2013-12-05 01:49:03
在最后一次迭代中
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循环变得重要,只需执行以下操作:
for(int i = 0; i < traincars; i++)
{
total += trains[i]; //unless of course you need something else...
count++;
}发布于 2013-12-05 01:50:50
问题在于:
for(int i = 0; i < traincars; i++)
{
total = trains[i] + trains[i+1] + trains[i+2] + trains[i+3];
count++;
}当i等于traincars-1时,您将访问元素i+1,i+2。和i+3,它们超出了trains数组的范围。
如果您的逻辑要求计算数组中4个连续元素的总和,那么您的for循环应该提前停止:
for(int i = 0; i < traincars - 3; i++) {...}https://stackoverflow.com/questions/20389761
复制相似问题