首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java.lang.ArrayIndexOutOfBoundsException的问题

java.lang.ArrayIndexOutOfBoundsException的问题
EN

Stack Overflow用户
提问于 2015-06-17 21:45:43
回答 4查看 108关注 0票数 0

我是Java编程的新手,我正在尝试编写一个方法,以新月或递减模式对数组进行排序。

代码语言:javascript
复制
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;
}

因此,在另一个类中,我添加了:

代码语言:javascript
复制
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

代码语言:javascript
复制
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异常。我试着在我的代码中找到问题,但是我不能...下面是输出:

代码语言:javascript
复制
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at Utili.Vettori.ordinaVettore(Vettori.java:335)
at mainProgram.main(mainProgram.java:24)
EN

回答 4

Stack Overflow用户

发布于 2015-06-17 21:52:56

在添加任何元素之前,在orderArray方法中初始化数组:

代码语言:javascript
复制
int[] newArray = new int[v.length];
票数 0
EN

Stack Overflow用户

发布于 2015-06-17 21:53:04

您的问题出在orderArray方法中,在该方法中,您创建了一个大小为0的数组,然后试图访问其中的元素,从而导致ArrayIndexOutOfBoundsException

变更线

代码语言:javascript
复制
int newArray[] = {};

创建一个与方法参数v大小相同的新整数数组。

代码语言:javascript
复制
int newArray[] = new int[v.length];

生成的方法应该如下所示

代码语言:javascript
复制
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;
}
票数 0
EN

Stack Overflow用户

发布于 2015-06-17 21:53:34

找到你的问题了

代码语言:javascript
复制
 int newArray[] = {};
 for (int i=0; i<v.length; i++) if (mode) newArray[i] = getMin(v, i); 
else newArray[i] = getMax(v, i);

您正在创建空数组,然后尝试访问不存在的字段

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30893502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档