用数学序列填充数组

  • 本文关键字:填充 数组 java arrays
  • 更新时间 :
  • 英文 :


我想编写一个代码,要求三个数字dig(1(,dig(2(,dig(3(,并根据以下规则显示数字dig(1(,dig(2(,dig(3(,...,dig(n(序列:

  • a = dig(2( - dig(1(
  • b = dig(3( - dig(2(
  • dig(n( = dig(n-1( + a 如果 n 为奇数
  • dig(n( = dig(n-1( + b 如果 n 是偶数

例:

7, 8, 5, 6, 3, 4, 1, 2, -1, 0

  • 它要求用户输入三个整数 dig1、dig2、dig3
  • 它询问一个数字 N ≥ 3,这将是整个序列计数。
  • 它打印一个以

然后打印序列,从三个前导整数开始,然后是遵循前三个整数定义的模式的 N-3 个其他项。有关详细信息,请参阅下面的示例。

(序列从 n = 1 开始,但数组当然从 0 开始。

int dig1  = 0;
int dig2 = 0;
int dig3 = 0;
int a;
int b;
int n = 0;
int i;
dig1 = scnr.nextInt();
dig2 = scnr.nextInt();
dig3 = scnr.nextInt();
n = scnr.nextInt();
int[] array = new int[n]; 
array[0] = dig1;
array[1] = dig2;
array[2] = dig3;
a = dig2 - dig1;
b = dig3 - dig2;
for (i = 3; i < n; i++){
if(i%2 == 0){
array[i] = b + array[i-1]; 
}
else{
array[i] = a + array[i-1];
}
}
System.out.println(array[i]);
}
}

每当我尝试将其打印出来时,都会收到此错误:

java.lang.ArrayIndexOutOfBoundsException

另一个例子:如果我在输入中输入数字:0 1 0 9,我应该收到序列0 1 0 1 0 1 0 1 0

打印array[n-1]只给我最终的输出。我正在尝试遍历每个数字。

对不起,如果不清楚,但任何帮助都会很棒,谢谢。

您的System.out.println(array[i]);似乎不在 for 循环中。 那么i将等于n.并且在长度为n的数组中没有索引n的元素。元素从0n-1

起初我以为你选择的数组大小小于 3,并且在数组初始化期间代码在这里失败:

array[0] = dig1;
array[1] = dig2;
array[2] = dig3;

但是现在,我实际上认为最后一行代码是问题所在。 仔细看看你的for循环:

for (i=3; i < n; i++) {
if (i % 2 == 0) {
array[i] = b + array[i-1]; 
}
else {
array[i] = a + array[i-1];
}
}
System.out.println(array[i]);

理解在for循环的末尾,i,循环计数器,将始终n数组的大小。 访问array[n]总是越界的,因为 Java 中的数组具有比实际存储桶数1 的最高可寻址索引。 因此,如果您打算只打印最终元素,请使用以下命令:

System.out.println(array[i-1]);

System.out.println(array[n-1]);

在第n=scrn.nextInt()行中,您正在从scrn中分配一个整数n,但您不知道该整数的值。

然后有了这个:

int[] array = new int[n]; 

数组的大小为 n 个元素,从索引0到索引n-1

因此,假设您用.nextInt()影响n的值低于3i的初始值,甚至不会达到循环,因为您将在这里超出界限:

array[0] = dig1; array[1] = dig2; array[2] = dig3;

因为您将尝试在不存在的索引处影响数组上的值(n 不如 3,但您试图影响大小为n的数组中的三个值(。

然后,如果 n 优于3,因为您的打印代码已从循环中输出,则 i的值等于 n,并且在索引n处没有值.请记住,只有当条件i<n为 false 时,循环才会离开,并且要达到该条件,i必须相等或更高,这将导致打印时出现 IndexOutOfBoundsException。

我认为您打印的行代码应该在for循环内。

相关内容

  • 没有找到相关文章

最新更新