public class ArrayExer01 { public static void main(String[] args) { int[] arr = {4, 4, 6, 1, 9, 9, 3}; //找最大值 int max = arr[0]; String index = "0"; for (int i = 1; i < arr.length; i++) { if (arr[i] > max) { max = arr[i]; index = i + ""; } else if (arr[i] == max) { index += "," + i; } } System.out.println("最大值是" + max); System.out.println("最大值的下标是[" + index + "]"); } }这个代码的漏洞在哪
时间: 2024-02-10 07:16:37 浏览: 26
这段代码的漏洞在于,当有多个相同的最大值时,只记录了第一个最大值的下标,而没有记录其他最大值的下标。因此,对于输入数组 {4, 4, 6, 1, 9, 9, 3},程序会输出最大值是9,但是最大值的下标只记录了一个值,即第5个元素的下标。正确的做法是使用一个列表来记录所有最大值的下标,例如使用 ArrayList 类型来存储。修改后的代码如下:
```
import java.util.ArrayList;
public class ArrayExer01 {
public static void main(String[] args) {
int[] arr = {4, 4, 6, 1, 9, 9, 3};
//找最大值
int max = arr[0];
ArrayList<Integer> indexList = new ArrayList<Integer>();
indexList.add(0);
for (int i = 1; i < arr.length; i++) {
if (arr[i] > max) {
max = arr[i];
indexList.clear();
indexList.add(i);
} else if (arr[i] == max) {
indexList.add(i);
}
}
System.out.println("最大值是" + max);
System.out.print("最大值的下标是[");
for (int i = 0; i < indexList.size(); i++) {
System.out.print(indexList.get(i));
if (i != indexList.size() - 1) {
System.out.print(",");
}
}
System.out.println("]");
}
}
```
修改后的代码使用了一个 ArrayList 类型的 indexList 来记录所有最大值的下标,同时在每次找到新的最大值时清空列表并添加该最大值的下标。最后输出最大值和所有最大值的下标。