运行提示下标越界,但是我没找出来,求大神帮助

qq838091562 2018-01-18 12:25:33

public class Test {
public static void main(String[] args) {
int[] arr={2,4,5,7,19,32,45};
newArr(arr);
}
public static int pr(int[] arr){
int a=8;
int i=0;
for(i=0;i<arr.length;i++){
if(a>arr[i]&&a<arr[i+1]){
break;
}
}
return(i+1);
}
public static void newArr(int[] arr){
int i=0;
int a=8;
int [] arr1=new int[arr.length+1];

for(i=0;i<arr1.length;i++){
if(i<pr(arr)){
arr1[i]=arr[i];
}
else if(i==pr(arr)){
arr1[i]=a;
}
else{
arr1[i]=arr[i+1];
}
System.out.println(arr1[i]);
}



System.out.println("a所在下标位置是:"+pr(arr));
}
}
...全文
852 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
my_panpan 2018-01-29
  • 打赏
  • 举报
回复
这段代码有两个地方都有越界问题。
public class Test {
    public static void main(String[] args) {
            int[] arr={2,4,5,7,19,32,45};
            newArr(arr);
        }
    public static int pr(int[] arr){
        int a=8;
        int i=0;
        for(i=0;i<arr.length;i++){      
            if(a>arr[i]&&a<arr[i+1]){
//这里arr[i+1]可能越界,你这里a赋值是8,看不出来问题,如果是一个循环到数组结束都不匹配的数,比如50,就体现出来了。正确做法是改为 for(i=0;i<arr.length-1;i++)
                break;
            }
        }
        return(i+1);
    }
    public static void newArr(int[] arr){
        int i=0;
        int a=8;
        int [] arr1=new int[arr.length+1];
         
        for(i=0;i<arr1.length;i++){
            if(i<pr(arr)){
                arr1[i]=arr[i];
            }
            else if(i==pr(arr)){
                arr1[i]=a;
            }
            else{
                arr1[i]=arr[i-1];//这里越界,应改为arr[a-1]
            }
            System.out.println(arr1[i]);
        }
         
             
         
        System.out.println("a所在下标位置是:"+pr(arr));
    }
    }
我是722 2018-01-29
  • 打赏
  • 举报
回复
for(i=0;i<arr.length;i++){ if(a>arr[i]&&a<arr[i+1]){ 如果要a为46呢,你第一步这里都会越界, if(i==arr.length-1){return (i+1);}else if(a>arr[i]&&a<arr[i+1]){ return (i+1); } reyurn -1;(这个用不到) break; 下面那个方法同理
谢小柒 2018-01-18
  • 打赏
  • 举报
回复
经过这个方法以后int [] arr1=new int[arr.length+1]; arr1的长度为8 pr这个方法返回的值4 当i=0,1,2,3的时候 for循环都会走if 当i=4的时候 for循环会走else if 当i=5,6,7的时候 for会走else 当i=7的时候,arr1[i]=arr[i+1];--------arr1[7]=arr[8]; 因为arr的长度是7,但是写的是arr[8],所以这个时候就会报下标越界了!!!!
自由自在_Yu 2018-01-18
  • 打赏
  • 举报
回复
引用 2 楼 yuxiangaaaaa 的回复:
for (i = 0; i < arr1.length; i++) { if (i < pr(arr)) { arr1[i] = arr[i]; } else if (i == pr(arr)) { arr1[i] = a; } else { arr1[i] = arr[i - 1]; //这个是arr[i-1] } System.out.println(arr1[i]); }
for (i = 0; i < arr1.length; i++) {
			if (i < pr(arr)) {
				arr1[i] = arr[i];
			} else if (i == pr(arr)) {
				arr1[i] = a;
			} else {
				arr1[i] = arr[i - 1];  //这个是arr[i-1]
			}
			System.out.println(arr1[i]);
		}
自由自在_Yu 2018-01-18
  • 打赏
  • 举报
回复
for (i = 0; i < arr1.length; i++) { if (i < pr(arr)) { arr1[i] = arr[i]; } else if (i == pr(arr)) { arr1[i] = a; } else { arr1[i] = arr[i - 1]; //这个是arr[i-1] } System.out.println(arr1[i]); }
youyouke 2018-01-18
  • 打赏
  • 举报
回复
public class Test { public static void main(String[] args) { int[] arr={2,4,5,7,19,32,45}; newArr(arr); } public static int pr(int[] arr){ int a=8; int i=0; for(i=0;i<arr.length;i++){ if(a>arr[i]&&a<arr[i+1]){ break; } } return(i+1); } public static void newArr(int[] arr){ int i=0; int a=8; int [] arr1=new int[arr.length+1]; for(i=0;i<arr1.length;i++){ if(i<pr(arr)){ arr1[i]=arr[i]; } else if(i==pr(arr)){ arr1[i]=a; } else{ arr1[i]=arr[i-1];//应改为arr[a-1] } System.out.println(arr1[i]); } System.out.println("a所在下标位置是:"+pr(arr)); } } 插入8以后,arr1中i角标的元素对应的应是arr中i-1角标的元素,也就是说arr1[5]对应的是arr[4]。
weixin_39670158 2018-01-18
  • 打赏
  • 举报
回复
引用 4 楼 weixin_39670158 的回复:
pr()中 for(i=0;i<arr.length;i++)改为for(i=0;i<arr.length-1;i++) 原因: for(i=0;i<arr.length;i++){ if(a>arr[i]&&a<arr[i+1]){ break; } }
假如if条件一直为false的话 当i取arr.length-1的时候 arr[i+1] 为 arr[arr.length] 显然越界 newArr()方法中 i为arr1.length-1 也就是 8的时候,arr[i]显然越界 解决方法:int [] arr1=new int[arr.length+1]; ->:int [] arr1=new int[arr.length]; 建议:使用数组的时候注意边界。
weixin_39670158 2018-01-18
  • 打赏
  • 举报
回复
pr()中 for(i=0;i<arr.length;i++)改为for(i=0;i<arr.length-1;i++) 原因: for(i=0;i<arr.length;i++){ if(a>arr[i]&&a<arr[i+1]){ break; } }

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧