ja数组越界怎么处理_java数组越界修改
1.ja中数组越界是什么意思
2.ja什么情况下会发生数组越界
3.求教各位高手,ja编程中碰到数组下标越界问题,状况比较奇怪
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就一个元素,所以你下面在用循环赋值的时候出错了。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。