每次當我想得到 3 查看我的代碼時得到 0 的輸出我不確定我哪里出錯了我可以在不使用我知道的方法的情況下做到這一點,但只是嘗試練習 java
public class App {
public static int second(int a[],int n) {
int[] arr = new int [n];
int temp;
for(int i=0;i<n;i ) {
for(int j=i 1;j<n;j ) {
if(arr[i] > arr[j]) {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
return arr[n-2];
}
public static void main(String[] args) {
int[] arr = {1,3,2,5,3};
int n = 5;
int result = second(arr,n);
System.out.println(result);
}
}
uj5u.com熱心網友回復:
您可以更改陣列引數名稱 arr 并洗掉宣告或將值從 a 復制到 arr。
public static int second(int arr[],int n) {
int temp;
for(int i=0;i<n;i ) {
for(int j=i 1;j<n;j ) {
if(arr[i] > arr[j]) {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
return arr[n-2];
}
你得到零的原因是原始 int 不能為空。因此,當您創建長度為 5 的陣列時,它開始填充零。
uj5u.com熱心網友回復:
通過使用流來做到這一點:
public static int second(int a[]) {
return Arrays.stream(a)
.sorted()
.skip(a.length - 2)
.findFirst()
.getAsInt();
}
我洗掉了第二個論點。它對您的陣列進行排序并跳過您想要的元素之前的所有元素,然后再選擇現在的第一個元素。
uj5u.com熱心網友回復:
public static int second(int[] arr) {
int highest = arr[0];
int second = 0;
for (int i = 1; i < arr.length; i ) {
int j = arr[i];
if (j >= highest) {
highest = j;
} else if (j > second) {
second = j;
}
}
return second;
}
public static void main(String[] args) {
int[] arr = {1, 3, 2, 5, 3};
int result = second(arr);
System.out.println(result);
}
uj5u.com熱心網友回復:
這是一種不需要排序的方法。
int[] arr = { 10, 2, 3, 19, 2, 3, 5 };
System.out.println(second(arr));
印刷
10
- 設定
largest為陣列中的第一個值 - 設定
secondLargest為盡可能小 - 現在遍歷陣列。
- 如果當前值大于最大值:
- 用最大替換第二個最大
- 用當前值替換最大
- else 檢查當前值是否大于 secondLargest,如果為真則賦值。
public static int second(int arr[]) {
int largest = arr[0];
int secondLargest = Integer.MIN_VALUE;
for (int i = 1; i < arr.length; i ) {
if (arr[i] > largest) {
secondLargest = largest;
largest = arr[i];
} else if (arr[i] > secondLargest) {
secondLargest = arr[i];
}
}
return secondLargest;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/491993.html
