我是Java编程的新手,我正在尝试编写一个方法,以新月或递减模式对数组进行排序。
public static int[] orderArray(int[] v, boolean mode) {
int newArray[] = {};
for (int i=0; i<v.length; i++) if (mode) newArray[i] = getMin(v, i); else newArray[i] = getMax(v, i);
return newArray;
}因此,在另一个类中,我添加了:
int[] myArray = {5,3,4,1,6};
//Call the method
int[] newOrdArray = Vettori.orderArray(myArray, true);
System.out.println(Vettori.printArray(newOrdArray, ","));有一些我之前写的方法,我正在用它来达到我的目标。我指的是方法: printArray、getMin和getMax
public static int getMin(int[] v, int pos) { //getMin
int minimum = 0;
if (v.length>0)
for (int i=pos;i<v.length;i++) {
if(i==pos) minimum=v[i];
else if(v[i]<=minimum) minimum=v[i];
}
return minimum;
}
public static int getMax(int[] v, int pos) { //getMax
int max = 0;
if (v.length>0)
for (int i=pos;i<v.length;i++) {
if(i==pos) max=v[i];
else if(v[i]>=max) max=v[i];
}
return max;
}
public static String printArray(int[] v, String separator) { //printArray
String stampa = "";
if (v.length>0) {
boolean insert_sep = true;
for (int i=0;i<v.length;i++) {
insert_sep = v[i]!=v.length;
if (insert_sep) stampa+=Integer.toString(v[i])+separator;
else stampa+=Integer.toString(v[i]);
}
stampa = stampa.substring(0, stampa.length()-1);
} else stampa = "Invalid array!";
return stampa;
}当我编译代码并尝试整理数组时,程序抛出java.lang.ArrayIndexOutOfBoundsException异常。我试着在我的代码中找到问题,但是我不能...下面是输出:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at Utili.Vettori.ordinaVettore(Vettori.java:335)
at mainProgram.main(mainProgram.java:24)发布于 2015-06-17 21:52:56
在添加任何元素之前,在orderArray方法中初始化数组:
int[] newArray = new int[v.length];发布于 2015-06-17 21:53:04
您的问题出在orderArray方法中,在该方法中,您创建了一个大小为0的数组,然后试图访问其中的元素,从而导致ArrayIndexOutOfBoundsException。
变更线
int newArray[] = {};创建一个与方法参数v大小相同的新整数数组。
int newArray[] = new int[v.length];生成的方法应该如下所示
public static int[] orderArray(int[] v, boolean mode) {
int newArray[] = new int[v.length];
for (int i=0; i<v.length; i++) if (mode) newArray[i] = getMin(v, i); else newArray[i] = getMax(v, i);
return newArray;
}发布于 2015-06-17 21:53:34
找到你的问题了
int newArray[] = {};
for (int i=0; i<v.length; i++) if (mode) newArray[i] = getMin(v, i);
else newArray[i] = getMax(v, i);您正在创建空数组,然后尝试访问不存在的字段
https://stackoverflow.com/questions/30893502
复制相似问题