2016-05-23 26 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