0

I need to return the indices of the max values of an array of integers by passing variable length array into a method. How do loop through an array then return one or multiple values

This what I have so far:

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

4 回答 4

0

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

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

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;
}

如果您想将索引作为字符串返回,您可以一次性完成整个操作,如下所示:

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;
}
于 2013-11-01T22:54:34.760 回答
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[];
}
于 2013-11-01T21:04:30.597 回答
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;
}
于 2013-11-01T21:23:44.857 回答
0

这会奏效。正如你所说,你的输入可以有多个max值,你想return从你的方法中得到一些东西,你应该考虑某种形式的列表(我用过ArrayList)。在列表main上方iterate并打印值。

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;
    }
于 2013-11-01T21:24:05.993 回答