此方法的目的是返回数组中最大元素的位置(下标索引)(不是其值,而是其位置)。如果相同的最大值在数组中出现多次,则它应该返回第一个或最早的位置。如果数组没有元素,则应该返回-1。
解决方案:
public static int maxPos(int[] arr) {
int pos = 0;
if(arr.length > 0 ) {
for(int i = 0; i < arr.length; i++) {
if(arr[i] > arr[pos]) {
pos = i;
} else {
pos = - 1;
}
}
return pos;
}
我理解设置一个虚拟变量“pos”来表示数组最大值的索引位置。并使用if(arr.length> 0)检查点然后继续。并且for循环遍历整个数组逐个检查索引具有最大数值,并且在每次迭代之后重新分配虚拟变量或继续向前。 我迷失的部分是在使用数组[]中的东西时,它会让我失望。我不认为java中的任何其他地方都有这样的表示法。例如,使用arrayList不会只是nameOfAL。得到(); 所以相当于一个数组使用[]的? arr [i]&gt;我有点困惑ARR [POS]。 这是说当我们在for循环中的第i个索引时,我们可以使用arr []并在该框中放置一些东西,当我们这样做时输出该索引的值。所以,只要我们在该数组框中放置一些东西,它总是会输出一个索引位置?把东西放在[]框内的目的是什么?它会输出放在括号内的任何值。 令我困惑的下一部分是为什么pos = i? 我理解如果if语句失败那么else是 - 1.但是为什么返回pos;每次迭代后?
谢谢
答案 0 :(得分:0)
您发布的代码包含一些错误,您应该从pos
-1
开始(而不是在给定值不大于当前最大值时重置它)。另外,我会检查null
。然后你可以用第二个元素开始你的循环。像,
public static int maxPos(int[] arr) {
int pos = -1; // <-- indicates no elements.
if (arr != null && arr.length > 0) {
pos = 0; // <-- there is at least one element.
for (int i = 1; i < arr.length; i++) {
if (arr[i] > arr[pos]) {
pos = i; // <-- update the max position
}
}
}
return pos;
}
答案 1 :(得分:0)
首先,你在方括号中放的是名为i
和pos
的变量,它们包含你在数组中访问的数字位置的值。它就像是arrayList类的get方法。
在完成for循环之前,它不会返回pos
。一般来说,它返回pos
,因为这是最大数字的索引,这是程序的重点。我想你只是错过了一个方括号,你有5 {
和4 }
。