Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 12 at ArrayArrange.main(Array

Exceptioninthread"main"java.lang.ArrayIndexOutOfBoundsException:12atArrayArrange.main... Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 12
at ArrayArrange.main(ArrayArrange.java:19)

public class ArrayArrange {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int oldarr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5};
int n=0;
for(int m=0;m<oldarr.length;m++){
if(oldarr[m]+0==0){
n++;
}
}
int newarr[]=new int[oldarr.length-n],x=0;
for(int m=0;m<oldarr.length;m++){
if(oldarr[m]+0==oldarr[m]){
newarr[x]=oldarr[m];
x++;
}
}
print(newarr);
}
public static void print(int temp[]){
for(int x=0;x<temp.length;x++){
System.out.print(temp[x]+"、");
}
}
}
展开
 我来答
dngoryaner
推荐于2018-04-11 · TA获得超过2350个赞
知道小有建树答主
回答量:2404
采纳率:0%
帮助的人:1140万
展开全部
你的数组下标越界了。
for(int m=0;m<oldarr.length;m++){
if(oldarr[m]+0==oldarr[m]){
newarr[x]=oldarr[m];
x++;
}
}

你上面这个错了。if(oldarr[m]+0==oldarr[m]){他是永远相等的。而newarr他的长度是int newarr[]=new int[oldarr.length-n],的。也就是说oldarr的长度大于newarr的长度,所有下标越界。
修改后的程序:
public static void main(String[] args) {// TODO Auto-generated method stub
int oldarr[] = {1, 3, 4, 5, 0, 0, 6, 6, 0, 5, 4, 7, 6, 7, 0, 5};
int n = 0;
for (int m = 0; m < oldarr.length; m++) {
if (oldarr[m] == 0) {
n++;
}
}
System.out.println(oldarr.length + " " + n);
int newarr[] = new int[oldarr.length - n];
int x = 0;
for (int m = 0; m < oldarr.length; m++) {
if (oldarr[m] > 0) {
newarr[x] = oldarr[m];
x++;
}
}
print(newarr);
}

public static void print(int temp[]) {
for (int x = 0; x < temp.length; x++) {
System.out.print(temp[x] + " ");
}
}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友28be30bff
2013-04-15
知道答主
回答量:34
采纳率:0%
帮助的人:20.2万
展开全部
newarr 数组的容量太小了,装不下所有的oldarr 数组中的内容

因为你在定义newarr 数组的时候:int newarr[]=new int[oldarr.length-n] 已经减去了n,n在此处为4。
所以,oldarr数组中有15个数字。但是newarr 数组中只有11个,而if (oldarr[m] + 0 == oldarr[m])中的oldarr[m] + 0 == oldarr[m] 这个判断条件永远成立。
所以无法将15个数字安插到11个容量的数组之中。

解决方法:oldarr[m] + 0 == oldarr[m] 应该是这个条件有问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式