数组最大值的索引

时间:2013-11-01 20:58:09

标签: java arrays

我需要通过将变量长度数组传递给方法来返回整数数组的最大值的索引。如何循环遍历数组然后返回一个或多个值

这是我到目前为止所做的:

public static int methodname3(int d[]) { //separate method with array

    int largest = 0;
    int index = 0;

    for (int i = 0; i < d.length; i++) {
        if ( d[i] > largest ) 
        {
           largest = d[i];
           index = i;
        }

    }
    return index;
}

4 个答案:

答案 0 :(得分:0)

我的建议不是使用int索引,而是使用整数数组,在循环时将索引添加到数组中,然后返回数组。

这样的事情:

        public static int methodname3(int d[])  //separate method with array
    {     
        int largest = 0;
        int index[];
        int c = 0;

    for (int i = 0; i < d.length; i++) {
        if ( d[i] > largest ) 
        {
            largest = d[i];
            index[c] = i;
            c++;
        }

    }
    return index[];
}

答案 1 :(得分:0)

按照上面的方法,它是:返回包含索引的列表

public List<Integer> methodname3(int d[])  //separate method with array
    {     
        int largest = 0;
        List<Integer> index = new ArrayList<Integer>();

    for (int i = 0; i < d.length; i++) {
        if ( d[i] > largest ) 
        {
            largest = d[i];
            index.add(i);
        }

    }
    return index;
}

答案 2 :(得分:0)

这样可行。如您所述,您的输入可以包含多个max值,并且您希望return某些方法可以考虑某种形式的列表(我使用ArrayList)。在列表上的mainiterate处打印值。

public static ArrayList<Integer> getIndices(int[] arr) {
        ArrayList<Integer> output = new ArrayList<Integer>();
        int max = Integer.MIN_VALUE;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] > max) {
                max = arr[i];
            }
        }
        for (int j = 0; j < arr.length; j++) {
            if (arr[j] == max) {
                output.add(j);
            }
        }
        return output;
    }

答案 3 :(得分:0)

如果您需要返回多个索引,则需要的不仅仅是 int 。根据您计划在以后处理数据的方式,我建议您返回数组字符串,然后将该值传递给另一个方法进行处理。

我建议将问题分解为两部分,首先查找并计算最大值的实例数,然后获取最大值的索引。如果要返回数组中的索引,则需要两次执行它(这是使用标准数组,而不是可扩展的ArrayLists)。如果你想将索引作为String返回,你只需要进行一次传递。

public static int[] methodname3(int d[]) {
    int largest = d[0] - 1; // this makes sure that negative values are checked
    int instances = 0;
    int[] indices = null;

    for (int i = 0; i < d.length; i++){
        if (d[i] > largest){
            largest = d[i];
            instances = 1;
        }
        else if(d[i] == largest){
            instances++;
        }
    }

    indices = new int[instances];

    for(int i = 0, j = 0; i < d.length; i++){
        if(d[i] == largest){
            indices[j] = i;
            j++;
        }
    }

    return indices;
}

如果你想把索引作为一个String返回,你可以像这样在一个传递中完成整个事情:

public static String methodname3(int d[]){
    int largest = d[0] - 1;
    String indices = "";

    for (int i = 0; i < d.length; i++){
        if (d[i] > largest){
            largest = d[i];
            indices = i; // This resets the String each time a larger value is found
        }
        else if(d[i] == largest){
            indices = indices + " " + i; 
            // This results in a space delimited String of indices
        }
    }

    return indices;
}