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]+"、");
}
}
} 展开
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]+"、");
}
}
} 展开
2个回答
展开全部
你的数组下标越界了。
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] + " ");
}
}
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] + " ");
}
}
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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] 应该是这个条件有问题。
因为你在定义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] 应该是这个条件有问题。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询