我正在尝试显示数组中最大值的位置(索引)数。这是一个包含100个随机数的数组。出于某种原因,在前几个数字之后输出是正确的。我总是在输出的开头得到错误的数字。这是我的代码; 感谢
public static void main(String[] args) {
int max = 0;
int array[] = new int[100];
System.out.println();
// code to display student responses
randomNum(array);
System.out.println(" Survey Responses - 100 Students: ");
response(array);
System.out.println("Positions of the highest numbers");
System.out.println();
for (int i = 0; i < array.length; i++) {
max = Math.max(max, array[i]);
if (array[i] == max) {
System.out.println(i);
}
}
}
private static void randomNum(int A[]) {
for (int i = 0; i < A.length; i++) {
A[i] = (int) (Math.random() * 10000) % 10 + 1;
}
}
public static void response(int[] resp) {
for (int x = 0; x < resp.length; x++) {
System.out.print(resp[x] + " ");
}
System.out.println();
}
答案 0 :(得分:1)
运行两个循环,如下所示:
for (int i = 0; i < array.length; i++) {
max = Math.max(max, array[i]);
}
for (int i = 0; i < array.length; i++) {
if (array[i] == max) {
System.out.println(i);
}
}
到目前为止,您输出的是前缀中看到的最大数量的索引,而不是等于总最大值的索引。
答案 1 :(得分:0)
对数组进行排序(仅用于澄清)会不会更容易?那么你的最小元素在索引0
,最大值在arr.length-1
,如下所示:
java.util.Arrays.sort(arr);
final int min = (arr.length > 0) ? arr[0] : 0;
final int max = (arr.length > 0) ? arr[arr.length-1] : 0;
答案 2 :(得分:0)
你的算法错了。当您打印出值时,您将循环遍历数组,然后将'max'的当前值与数组的当前元素进行比较。所以如果你有一个只有10个数字的数组(为简单起见)
1,2,3,4,5,6,7,8,9,10
在第一次循环中,你将'max'(0)的当前值与数组的第一个元素(1)进行比较,然后打印1并将max设置为1.第二次通过你max(1)的当前值到数组(2)的第二个元素并打印2并将max设置为2.对于循环中的每次迭代都会发生同样的情况,并且最终会打印出每个值。
与
相反的情况10,9,8,7,6,5,4,3,2,1
以不同的顺序包含相同的数字,你只打印10,因为你在第一次循环时将max设置为10.