1.ja中数组越界是什么意思

2.ja什么情况下会发生数组越界

3.求教各位高手,ja编程中碰到数组下标越界问题,状况比较奇怪

ja数组越界怎么处理_java数组越界修改

public?static?int[]?getSons(int?n)?{

int[]?a?=?new?int[getLength(n)];

int?j?=?0;

for?(int?i?=?1;?i?<?n?/?2;?i++)?{

if?(n?%?i?==?0){

a[j]?=?i;

j++;}

}

//?n15a?3.?j=3?a[j]?

a[j]?=?n;

return?a;

}

public?static?int[]?getSons(int?n)?{

int[]?a?=?new?int[getLength(n)+1];?//+1,n

int?j?=?0;

for?(int?i?=?1;?i?<=?n?/?2;?i++)?{?//<=

if?(n?%?i?==?0)

a[j++]?=?i;

}

a[j]?=?n;

return?a;

}

ja中数组越界是什么意思

仅针对以上语句做分析,

开始的时候i=1,设输入的n=3,那数组的长度就是3,数组即为arr[0],arr[1],arr[2],

调用:while(i < n),返回:true,

此时你就直接使用:i++,然后:i=2,

即此时的斐波那契表达式是:arr[2]=arr[1]+arr[0],此时没问题,

然后再循环,此时:i=2,n=3,调用:while(i < n),返回:true,依然执行while里面的语句,

此时的表达式是:arr[3] = arr[2] + arr[1];,

但是arr数组的长度只有3,数组索引从0开始,你的程序就报数组下标越界异常了,修改建议是可以使用递归函数来解决斐波那契数列的输出,当然,以上程序也可以完成,将i++放到后面,下面修改仅提供参考:

import?ja.util.Scanner;

public?class?Workl4

{

public?static?void?main(String[]?args)?

{

Scanner?sc?=?new?Scanner(System.in);

int?i?=?2;

int?n?=?sc.nextInt();

int[]?arr?=?new?int[n];

arr[0]?=?1;

arr[1]?=?1;

while(i?<?n){

arr[i]?=?arr[i?-?1]?+?arr[i?-?2];

//输出斐波那契数列

System.out.println(arr[i]);

//递归语句放到最后

++i;

}

}

}

ja什么情况下会发生数组越界

1、定义静态数组的话,数组是有固定的长度的,如

int?arr[]=new?int[8];

System.out.println(arr[8]);

定义一个长度为8的静态数组,那么下标是从0-7,这时如果输出第8个,就是越界了。

求教各位高手,ja编程中碰到数组下标越界问题,状况比较奇怪

当你已经声明了一个长度为N的数组以后,在你取值的时候,如果下标n>=N,就会越界,如:

String[] arr = new String[10]; //N为10

System.out.println(arr[11]); // n为11,越界,n为10也越界,因为下标从0开始

while(lignea!=null){

String[] sNumbera=lignea.split(" ");

for(int j=0;j<sNumbera.length;j++){

schro[i][j]=sNumbera[j];

}

System.out.println(i+"----------------");

for (int m=0;m<3;m++){

String[]str0 = schro [i][0].split("-");

ida[i][m]=str0[m]; //**************此为52行

这块出错了,你用String[] sNumbera=lignea.split(" ")这句话去分割你读的第一行,这个时候如果你输入了一行比如 aaa 这个时候 str0就一个元素,所以你下面在用循环赋值的时候出错了。