我是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)
答案 0 :(得分:0)
在添加任何元素之前,在orderArray方法中初始化数组:
int[] newArray = new int[v.length];
答案 1 :(得分:0)
您的问题在于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;
}
答案 2 :(得分:0)
找到了你的问题
//Global Asax, Web Api register methods is used to defined WebApi formatters
您正在创建空数组,然后尝试访问不存在的字段
答案 3 :(得分:0)
问题很简单,在&#34; orderArray(int [] v,布尔模式)&#34;方法,你没有初始化你的新数组,因此你得到ArrayOutOfBoundException。
在这里,您必须进行这些更改,我已经注释掉了错误行并为数组初始化添加了新行;
// int newArray[] = {};
int newArray[] = new int[v.length];
完整的更正代码如下;
public class TestArrayOrder {
public static void main(String[] args) {
int[] myArray = { 5, 3, 4, 1, 6 };
// Call the method
int[] newOrdArray = orderArray(myArray, true);
System.out.println(printArray(newOrdArray, ","));
}
public static int[] orderArray(int[] v, boolean mode) {
// int newArray[] = {}; //you should initialize the array
int newArray[] = new int[v.length]; // array initialization
for (int i = 0; i < v.length; i++)
if (mode)
newArray[i] = getMin(v, i);
else
newArray[i] = getMax(v, i);
return newArray;
}
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;
}
}
以下是&#34; true &#34;的输出。模式调用 orderArray 方法;
1,1,1,1,6
输出&#34; false &#34;模式;
6,6,6,6,6
希望它有所帮助。