2016-06-12 94 views
0

我在這裏遇到問題:Java - 爲什麼在控制檯上輸出空白?

我被要求創建一個隨機抽獎號碼的集合。這些數字應該從低到高排序,並且重複不應該放在控制檯上。

到目前爲止它工作正常,但當集合的大小不是== 6時,控制檯會拋出一個空輸出。我給出了一條else指令,該方法應該再次執行。

希望有人能夠理解並能提供幫助。

謝謝!

import java.util.*; 

public class Lotto { 
    public static Collection<Integer> tippen() { 
     List<Integer> liste = new ArrayList<Integer>(); 

     while (liste.size() < 6) { 
      liste.add((int) (Math.random()*49+1)); 
     }  

     Collections.sort(liste); 

     LinkedHashSet<Integer> lottotipp = new LinkedHashSet<Integer>(liste); 
     liste.clear(); 
     liste.addAll(lottotipp); 

     return lottotipp; 
    } 

    public static void main (String[] args) { 

     Collection<Integer> zahlen = tippen(); 

     if (zahlen.size() == 6) { 
      System.out.println("Ihr Tipp: " + zahlen); 
     } else { 
      tippen(); 
     } 
    } 
} 
+0

@ martijnn2008'zahlen.size()= 0',在'tippen()'方法永遠不會返回的東西大小爲0.它將包含至少1個元素。 – Arjan

+0

好的抱歉,我誤解了代碼,但lottotipp'的目的對我來說很神奇。 – martijnn2008

回答

0

我給該方法應該然後再次執行的其他指令。

tippen再次執行,是的;但tippen沒有任何輸出。第二次調用它時,也不要使用tippen的結果。

如果要再次運行整件事,請重新運行main而不是tippen。 (可能是把所有的代碼從main到不帶任何參數的新功能。)


另外:如果你想要一個int,我建議建立一個Random實例,並使用nextInt,而不是使用Math.random獲得double,將double乘以1,然後將其強制爲int

0

因爲你的隨機(鑄造爲int)有時會返回相同值的兩倍(或更多)..

(int) (Math.random()*49+1) 

然後,刪除與LinkedHashSet重複的,所以大小AINT 6了。

LinkedHashSet<Integer> lottotipp = new LinkedHashSet<Integer>(liste); 

你的「其他」修復再次調用該方法,但它並沒有打印輸出。

如果你運行它很多很多次,它有時會打印輸出,有時不...

0

你忘了打印的竅門();
只是打印:

System.out.println(tippen()); 
0

的問題是由於如果zahlen尺寸不6,你調用tippen()方法,但它沒有分配到任何物體。 我添加了一個do{}while();塊,直到zahlen的大小爲6。

public class Lotto { 
public static Collection<Integer> tippen() { 
    List<Integer> liste = new ArrayList<Integer>(); 

    while (liste.size() < 6) { 
     liste.add((int) (Math.random()*49+1)); 
    }  

    Collections.sort(liste); 

    LinkedHashSet<Integer> lottotipp = new LinkedHashSet<Integer>(liste); 
    liste.clear(); 
    liste.addAll(lottotipp); 

    return lottotipp; 
} 

public static void main (String[] args) { 

    Collection<Integer> zahlen = tippen(); 

    do{ 
    if (zahlen.size() == 6) { 
     System.out.println("Ihr Tipp: " + zahlen); 
    } else { 
     zahlen = (tippen()); 
    } 
    }while(zahlen.size() != 6); 

} 
} 

如果你希望你的程序,即使他們不是6打印數字,你可以這樣做:

if (zahlen.size() == 6) { 
    System.out.println("Ihr Tipp: " + zahlen); 
} else { 
    System.out.println("Ihr tipp: " + tippen()); 
} 

這應該解決您的問題。

1

正如其他人所指出的,您的集合並不總是包含6個元素,然後再次調用您的方法,但結果從不打印。

最簡單的解決方案是使方法總是返回6個元素,直接向該集合添加整數直到它具有6個元素。這樣你可以拋出整個布爾混合物。

另請注意,您已將集合中的元素添加到列表中,對列表進行排序,但隨後返回集合。

public class Lotto { 

    public static Collection<Integer> tippen() { 
     TreeSet<Integer> lottotipp = new TreeSet<>(); 
     Random rand = new Random(); 

     while (lottotipp.size() < 6) { 
      lottotipp.add(rand.nextInt(50) + 1); 
     } 

     return lottotipp; 
    } 

    public static void main(String[] args) { 
     Collection<Integer> zahlen = tippen(); 
     System.out.println("Ihr Tipp: " + zahlen); 
    } 
} 
+0

謝謝Arjan,很好的解決方案和解釋! – svb

+0

嘿Arjan,我也可以只使用TreeSet而不是LinkedHashSet? – svb

+0

@svb當然,看到更新的答案。另請查看[Java Collection Matrix](https://docs.google.com/spreadsheets/d/1JSBPho-Df_1Km0SxXfjW8a8PRLLTeoDDiY8ePs_Ac-c/pub)。如有疑問,請嘗試:-) – Arjan

0

謝謝大家了,我現在解決了這個問題是這樣的:!

import java.util.*; 

public class Lotto { 
    public static Collection<Integer> tippen() { 
     List<Integer> liste = new ArrayList<Integer>(); 

     while (liste.size() < 6) { 
      liste.add((int) (Math.random()*49+1)); 
     }  

     Collections.sort(liste); 

     LinkedHashSet<Integer> lottotipp = new LinkedHashSet<Integer>(liste); 
     liste.clear(); 
     liste.addAll(lottotipp); 

     return lottotipp; 
    } 

    public static void main (String[] args) { 

     Collection<Integer> zahlen = tippen(); 

     while(zahlen.size() != 6){ 
      zahlen = (tippen()); 
     } 
     System.out.println("Ihr Tipp: " + zahlen); 
    } 
} 
+0

它仍然包含一個錯誤,並且正在執行不必要的循環。查看我的[回答詳情](http://stackoverflow.com/a/37775079/6178459)。 – Arjan