我的问题是,如果我在数组中输入两个maxvalue数字,例如。 100、10、100。如何获取输出以打印两个索引号?
索引1和索引3的预期输出为100 索引已添加1,因为我希望索引从1开始而不是零
答案 0 :(得分:1)
将此添加到初始化。
HashSet<Integer> maxIndices = new HashSet<Integer>();
第二次通过里程数组,并将{max {1}}的最大值传递给HashSet。
另一种选择是使用HashMap,其中第一个整数是里程,第二个值是找到的数量的正整数。
因为它只进行一次通过,所以即使您计算每英里里程,也可能会更快,而不仅仅是最后一次里程最大。当然,它是否取决于执行时的数据,编译器和环境条件。
对于返回值,您将需要自定义POJO Java Bean,或者可以使用Pair <>或Tuple <>。 (请参见Using Pairs or 2-tuples in Java。)
答案 1 :(得分:-1)
使用一系列 for 循环的简单Java。下面的方法将返回一个二维int数组,每行包含两列,即最高的数组值及其相应的数组索引号。
public int[][] getAllMaxValues(int[] allValues) {
int maxVal = 0;
int counter = 0;
// Get the Max value in array...
for (int i = 0; i < allValues.length; i++) {
if (allValues[i] > maxVal) {
maxVal = allValues[i];
}
}
// How many of the same max values are there?
for (int i = 0; i < allValues.length; i++) {
if (allValues[i] == maxVal) {
counter++;
}
}
// Place all the max values and their respective
// indexes into a 2D int array...
int[][] result = new int[counter][2];
counter = 0;
for (int i = 0; i < allValues.length; i++) {
if (allValues[i] == maxVal) {
result[counter][0] = maxVal;
result[counter][1] = i;
counter++;
}
}
// Return the 2D Array.
return result;
}
如何使用此方法:
int[] allMiles = {100, 10, 100, 60, 20, 100, 34, 66, 74};
int[][] a = getAllMaxValues(allMiles);
for (int i = 0; i < a.length; i++) {
System.out.println("Array max value of " + a[i][0] +
" is located at index: " + a[i][1]);
}
控制台窗口将显示:
Array max value of 100 is located at index: 0
Array max value of 100 is located at index: 2
Array max value of 100 is located at index: 5