2016-05-23 37 views
2

我在我的代碼中使用了一個switch語句,它拋出一個硬幣並生成一個隨機結果。如果硬幣落在0上,則顯示尾巴,如果落在1上,則顯示頭部。但是,當我使用switch語句,輸出總是要麼只有「頭」或兩個「尾巴和‘頭’的在java中生成隨機數的switch語句:not working

我的代碼:

import static java.lang.System.*; 
import java.util.*; 

class generateRandomNumbers{ 
    public static void main(String[] args){ 
     Random coin = new Random(); 
     int toss; 
     toss = coin.nextInt(2); 
     switch(toss){ 
      case 0 : out.println("tails"); 
      case 1 ; out.println("heads"); 
     } 
    } 
} 

但是,當我使用的if-else聲明它的工作按計劃進行:

import static java.lang.System.*; 
import java.util.*; 

class generateRandomNumbers{ 
    public static void main(String[] args){ 
     Random coin = new Random(); 
     int toss; 
     toss = coin.nextInt(2); 
     if(toss == 0){ 
      out.println("tails"); 
     } 
     else{ 
      out.println("heads"); 
     } 
    } 
} 
+2

錯過了病例間的'break'...此代碼不會編譯.....' case1;' – piyushj

+0

在您的病例後添加break語句 – Kajal

+0

哦,是的!謝謝! @piyush jaiswal –

回答

0
import static java.lang.System.*; 
import java.util.*; 

class generateRandomNumbers{ 
    public static void main(String[] args){ 
     Random coin = new Random(); 
     int toss; 
     toss = coin.nextInt(2); 
     switch(toss){ 
      case 0 : 
      out.println("tails"); 
      break; 
      case 1 : 
      out.println("heads"); 
      break; 
     } 
    } 
} 
+1

的適當答案對不起,您的代碼不會編譯.....'case 1; ' – piyushj

+0

複製並粘貼錯誤。謝謝 – exoddus

1

嘗試添加破

Random coin = new Random(); 
int toss; 
toss = coin.nextInt(2); 
switch(toss){ 
    case 0 : System.out.println("tails"); break; 
    case 1 : System.out.println("heads"); break; 
} 
3

case s在switch聲明通過如果你不終止他們(通常與break,但return ing或throw一個例外也將做的伎倆)。在你的情況下,當你隨機產生0它的情況被執行,然後程序繼續到下一個案例(1)。您可以通過在每個case年底增加break語句解決這個問題:

switch(toss){ 
    case 0 : 
     out.println("tails"); 
     break; // Here 
    case 1 : 
     out.println("heads"); 
     break; // And here 
} 

其他信息可以在Java's tutorial on the subject找到。

0

您需要在案件後突破您的開關。否則,它將繼續運行switch語句中的其餘代碼。 例如:

import static java.lang.System.*; 
import java.util.*; 

class generateRandomNumbers{ 
    public static void main(String[] args){ 
     Random coin = new Random(); 
     int toss; 
     toss = coin.nextInt(2); 
     switch(toss){ 
      case 0 : 
       out.println("tails"); 
       break; 
      case 1 : 
       out.println("heads"); 
       break; 
     } 
    } 
} 
1

雖然改變代碼如下幫助:

case 0 : out.println("tails"); break; 
case 1 : out.println("heads"); break; 

但對於像你這樣的情況下對付我寧願使用boolean flag解決我的問題。

0

爲了獲得預期的行爲,您需要在第一個case塊後面有一個break語句。 switch語句的工作方式是不中斷,控制流在匹配的情況後執行每條語句。這將是您的案例正確的代碼。

import static java.lang.System.*; 
import java.util.*; 

class generateRandomNumbers{ 
    public static void main(String[] args){ 
     Random coin = new Random(); 
     int toss; 
     toss = coin.nextInt(2); 
     switch(toss){ 
      case 0 : 
       out.println("tails"); 
       break; 
      case 1 ; out.println("heads"); 
     } 
    } 
} 

瞭解更多關於switch語句在Java中的工作原理。 https://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html