2017-04-02 79 views
1

試圖爲打印輸出:無法理清一個ArrayList

首先最大

一分鐘

秒最大

二分鐘

三最大...等我的代碼:

import java.util.ArrayList; 
import java.util.Collection; 
import java.util.Collections; 
import java.util.Comparator; 
import java.util.Iterator; 
import java.util.List; 


public class Arraylist1 { 
public static void main(String args[]){ 
List <Integer>list= new ArrayList <Integer> (); 
list.add(20); 
list.add(30); 
list.add(70); 
list.add(50); 
list.add(60); 
list.add(40); 
for(int i=0;i<list.size();i++) { 
    if(i%2==0){ 
    Object num=Collections.max(list); 
    System.out.println(num); 
    list.remove(num);  
    } 
else if(i%2!=0) 
    { 
    Object num1=Collections.min(list); 
    System.out.println(num1); 
    list.remove(num1); 
    } 
} 
} 
} 


70 
20 
60 

爲什麼只打印前三個數字?

我的預期輸出:

70 20 60 30 50 40 
+0

在一個interation的for循環中,它只執行max()或min()情況。我想我可以幫忙。 –

+0

並提示下次:請花一些時間來正確格式化/縮進所有輸入。正如所說:請做**不要**忘記接受其中一個答案。尋求幫助,接受這一點並不是很禮貌,然後繼續前進而不回頭,是嗎? – GhostCat

回答

0

With每個list.remove(),列表大小遞減。所以循環只運行3次。您可以改爲使用while循環。

public static void main(String args[]){ 
    List<Integer>list= new ArrayList <Integer>(); 
    list.add(20); 
    list.add(30); 
    list.add(70); 
    list.add(50); 
    list.add(60); 
    list.add(40); 
    int i =0; 
    while(!list.isEmpty()) { 
     if(i%2==0){ 
      Object num=Collections.max(list); 
      System.out.println(num); 
      list.remove(num); 
     } 
     else if(i%2!=0) { 
      Object num1=Collections.min(list); 
      System.out.println(num1); 
      list.remove(num1); 
     } 
     i++; 
    } 
} 
1

你的問題是,你的循環重複,直到,直到reachig list.size()

但是你一直在減小這個尺寸;但另一方面,你不斷重新計算該循環條件!

您必須將該大小分配給像initialSize這樣的輔助變量,然後與該固定值進行比較!

+0

它工作..乾杯! – Swati

+0

很高興聽到這個消息。所以不要忘記稍後接受:-) – GhostCat

+0

for(int i = 0; i> list.size(); i ++),如果我以這種方式迭代,出了什麼問題。 雖然它適用於3個元素 – Swati

1
for(int i=0;i<list.size();i++) 

循環條件不正確。

你不循環6次。

您只循環3次,因爲在每次迭代中從列表中刪除項目時,大小會發生變化。

所以,你可能想:

int max = list.size(); 

for(int i = 0; i < max; i++) 

那就是你要修復的循環是在列表中的條目的初始數量。

+0

你能幫我使用比較器接口來寫相同的代碼嗎? – Swati

+0

@Swati,你對你原來的問題有很多幫助,你還沒有「接受」答案讓人們知道問題已經解決。你甚至懶得承認我提供的幫助/解釋,所以我想我會跳過下一個問題。在任何情況下,每個主題都有一個問題,所以所有的建議都與原始主題相關,否則,發佈過於困惑,無法理解所有建議的含義。另外,我不知道你現在在問什麼。 – camickr

+0

我是新來stackover流。所以不知道如何接受答案。可以請你在這方面幫助我@camickr – Swati