尋找陣列最大值的通用思路:
public static int getMax(int[] arr) {
int max = arr[0]; // 假設第一個元素最大
for (int i = 1; i < arr.length; i++) { // 從第二個開始比較
if (arr[i] > max) {
max = arr[i]; // 更新最大值
}
}
return max;
}
特點:直觀、只回傳值、無法得知位置。
public static int getMaxIndex(int[] arr) {
int maxIndex = 0; // 假設第一個元素索引為最大
for (int i = 1; i < arr.length; i++) {
if (arr[i] > arr[maxIndex]) { // 比較當前元素與「目前最大值」
maxIndex = i; // 更新索引
}
}
return maxIndex; // 回傳索引,arr[maxIndex] 即最大值
}
優勢:一次遍歷同時獲得「最大值」與「所在索引」,擴充性更強。
public class ArrayMaxDemo {
public static void main(String[] args) {
int[] arr = {2, 5, 4, 1};
System.out.println("最大值 (模式一): " + getMax(arr)); // 5
System.out.println("最大值索引 (模式二): " + getMaxIndex(arr)); // 1
System.out.println("最大值 (透過索引): " + arr[getMaxIndex(arr)]); // 5
}
// 模式一
public static int getMax(int[] arr) {
int max = arr[0];
for (int i = 1; i < arr.length; i++) {
if (arr[i] > max) max = arr[i];
}
return max;
}
// 模式二
public static int getMaxIndex(int[] arr) {
int maxIndex = 0;
for (int i = 1; i < arr.length; i++) {
if (arr[i] > arr[maxIndex]) maxIndex = i;
}
return maxIndex;
}
}
<?php
class ArrayDemo {
public static function main() {
$arr = [2, 5, 4, 1];
echo "模式一: " . self::getMax($arr) . "\n"; // 5
echo "模式二索引: " . self::getMaxIndex($arr) . "\n"; // 1
echo "模式二值: " . $arr[self::getMaxIndex($arr)] . "\n"; // 5
}
public static function getMax($arr) {
$max = $arr[0];
for ($i = 1; $i < count($arr); $i++) {
if ($arr[$i] > $max) $max = $arr[$i];
}
return $max;
}
public static function getMaxIndex($arr) {
$maxIndex = 0;
for ($i = 1; $i < count($arr); $i++) {
if ($arr[$i] > $arr[$maxIndex]) $maxIndex = $i;
}
return $maxIndex;
}
}
ArrayDemo::main();
public static int getMaxSafe(int[] arr) {
if (arr == null || arr.length == 0) {
throw new IllegalArgumentException("陣列不可為空");
}
// ... 原邏輯
}
Arrays.stream(arr).parallel().max() 或 Fork/Join 框架Comparable<T> 可支援任意可比較型別max = 0:陣列全負數時錯誤i = 0 開始:多一次自我比較 (無害但多餘)ArrayIndexOutOfBoundsExceptionmax = arr[0] + for (int i = 1; ...) + 空檢查