2017-03-10 66 views
0

我可以填充我的數組,並找到兩個最大的數字。但是,我不能刪除它。可能你們可以幫我嗎?刪除陣列中的兩個最大元素

int n = sc.nextInt(); 
    int [] myArray = new int[n]; 
    int first = 0; 
    int second = 0; 
     for(int i = 0; i < myArray.length; i++) { 
    int num = sc.nextInt();` 
     if (num > first) { 
     second = first; 
     first = num; 
    } else if(num > second) 
     { 
     second = num; 
     } 
    } 

    System.out.println("The largest " + first+ "The second largest " + second); 
+0

爲什麼你不能刪除它? – Jens

+3

我認爲你期望你的數組被兩個元素收縮?這是不可能的數組。您可以將這些元素設置爲null。如果你想刪除這些元素,使用另一個數據結構列表'List' –

+0

這是我的任務:向控制檯寫出整數列表的平均值,但忽略兩個最大值。 –

回答

1

您可以簡單地對數組進行排序並查找或刪除兩個最大的元素。

int [] myArray = new int[]{14,5,2,16,18,20}; 
System.out.println("The original array is "+ " " +Arrays.toString(myArray)); 
Arrays.sort(myArray); 
System.out.println("The sorted array is "+ " " +Arrays.toString(myArray));; 

int fisrtmax = myArray[myArray.length-1]; 
int secondmax = myArray[myArray.length-2]; 

System.out.println("The first biggest number is " + fisrtmax+ " The second biggest number is " + secondmax); 

int [] arrafterremove= Arrays.copyOf(myArray, myArray.length-2); 


System.out.println("The array after removing the two biggest numbers is " + Arrays.toString(arrafterremove)); 

RUN

The original array is [14, 5, 2, 16, 18, 20] 
The sorted array is [2, 5, 14, 16, 18, 20] 
The first biggest number is 20 The second biggest number is 18 
Array after removing the two biggest numbers is [2, 5, 14, 16] 
+0

如果數組只包含一個值或者爲空,那麼該怎麼辦?int [] myArray = new int [] {14};'您將得到一個錯誤'java.lang。ArrayIndexOutOfBoundsException'你應該避免這一點,你可以看到我的代碼貝婁祝你好運 –

+0

@ YCF_L,我的解決方案是基於原始帖子。任何異常情況下,那麼問題應該更新。 – FSm

+0

mmmm,好的...... –

1

您可以創建在其中存儲myArray但兩個最大的所有元素的數組(在這種情況下,filteredArray)。 此外,最好保存兩個最大數字的索引而不是它們的值,以便能夠更輕鬆地將其過濾掉。

這應該工作(你會發現你想要的陣列在filteredArray)。

int n = sc.nextInt(); 
int [] myArray = new int[n]; 
int first = 0; 
int second = 0; 
for(int i = 0; i < myArray.length; i++) { 
    myArray[i] = sc.nextInt(); 
    if (myArray[i] > myArray[first]) { 
     second = first; 
     first = i; 
    } else if(myArray[i] > myArray[second]) { 
     second = i; 
    } 
} 
int [] filteredArray = new int[n-2]; 
int skipped = 0; 
for(int i = 0; i < myArray.length; i++) { 
    if(i != first && i != second) 
     filteredArray[i - skipped] = myArray[i]; 
    else 
     skipped++; 
} 
0

可能是下面的代碼對您有用

again : 
for (int i = 0; i < n; i++) 
{    
    if ((a[i] < a[i+1]) && (i+1)<n) 
    { 
     temp = a[i]; 
     a[i] = a[i+1]; 
     a[i+1] = temp; 
     continue again; 
    }   
} 
System.out.println("The largest " + a[0] + " & second largest " + a[i]); 

如果你想刪除其他然後你可以做到這一點

for(int i=2; i<n ; i++) 
    test = ArrayUtils.remove(a, i); 
1

如果您使用的是Java 8,你可以整理你的數組,然後你可以循環拋出你的數組,並將其值設置爲另一個避免最後兩個整數例如:

//Your array 
Integer[] array = {8, 99, 6, 336, 2}; 

//sort your array this can give your [2, 6, 8, 99, 336] 
Arrays.sort(array); 

//create a new array with the length = array - 2 if the length of array < 2 then 0 
Integer[] array2 = new Integer[array.length > 2 ? array.length - 2 : 0]; 

//copy your array into the array2 avoiding the 2 last 
System.arraycopy(array, 0, array2, 0, array.length > 2 ? array.length - 2 : 0); 

//print your array, this will print [2, 6, 8] 
System.out.println(Arrays.toString(array2)); 
+0

是的,這是真的,謝謝你的建議,我可以改變它''Arrays.sort(array);'@Andro –

+0

好吧,好的。但是,流對於初學者來說仍然是一種先進的方法。問候 – FSm

1

排序您的數組(默認排序是升序,即從最小到最大),然後創建一個沒有最後兩個元素的數組的新副本。

if(myArray.length > 2) { 
    Arrays.sort(myArray); 
    myArray = Arrays.copyOf(myArray, myArray.length-2); 
} else { 
    throw new IllegalArgumentException("Need moar elements in array!"); 
} 

然後對結果數組執行任何計算。如果您想保留原始陣列,請在執行copyOf()時不要覆蓋myArray

+0

這是真的,但你應該檢查長度是否不小於2,如果你的數組是空的或包含1值,你將得到'java.lang.NegativeArraySizeException'。 –

+0

錯誤處理作爲練習留給讀者。我只是展示了最簡單,最優雅的方式來處理這個問題,而不是半頁循環,即使是最強硬的軟件考古學家也會混淆。 – Kayaman

+0

mmmm,好的...... –