java.lang.ArrayIndexOutOfBoundsException问题

时间:2015-06-17 13:45:43

标签: java arrays indexing

我是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)

4 个答案:

答案 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

希望它有所帮助。