如何将if-else语句转换为switch语句

时间:2015-10-22 18:54:06

标签: java if-statement switch-statement

我有这个滚动骰子的程序1000000并找到1的,2的,3的,4的,5的,6的数量。但我也需要做一个切换声明。我无法使用扫描仪输入

import java.util.Random;

public class DiceRoll_NP {

    public static void main(String[] args) {
        Random rand = new Random();
        final double NUMBER_OF_ROLLS = 1000000.0;

        int x = rand.nextInt();
        // System.out.println(x);

        int ones = 0, twos = 0, threes = 0, fours = 0, fives = 0, sixes = 0;

        for (int i = 1; i <= NUMBER_OF_ROLLS; i = i + 1) {
            int y = rand.nextInt(6) + 1;
            if (y == 1) ones++;
            else if (y == 2) twos++;
            else if (y == 3) threes++;
            else if (y == 4) fours++;
            else if (y == 5) fives++;
            else if (y == 6) sixes++;
            System.out.print(y + " ");
        }
        System.out.printf("\nOnes: %.2f%%\n", 100 * ones / NUMBER_OF_ROLLS);
        System.out.printf("Twos: %.2f%%\n", 100 * twos / NUMBER_OF_ROLLS);
        System.out.printf("Threes: %.2f%%\n", 100 * threes / NUMBER_OF_ROLLS);
        System.out.printf("Fours: %.2f%%\n", 100 * fours / NUMBER_OF_ROLLS);
        System.out.printf("Fives: %.2f%%\n", 100 * fives / NUMBER_OF_ROLLS);
        System.out.printf("sixes: %.2f%%\n", 100 * sixes / NUMBER_OF_ROLLS);
    }

}

这就是我到目前为止所拥有的。当我运行它时,什么都没有出现

import java.util.Random;

公共课DiceRoll_Switch {

public static void main(String[] args) {
    Random rand = new Random();
    int ones = 0, twos = 0, threes = 0, fours = 0, fives = 0, sixes = 0;
    int y = rand.nextInt(6) + 1;
    for (int i = 1; i <= 1000000; i = i + 1)
        switch (y){
        case 1: ones++;
        break;
        case 2: twos++;
        break;
        case 3: threes++;
        break;
        case 4: fours++;
        break;
        case 5: fives++;
        break;
        case 6: sixes++;
        break;

3 个答案:

答案 0 :(得分:1)

在编程的早期阶段,goto语句被大量使用。它的工作原理如下:

if ( true )
   goto label;

System.out.println("A");

label:

System.out.println("B");

上面的代码会跳转到标签,跳过打印A。这很简单。

现在,为什么我提到这个?以下是if语句的示例:

if ( y == 1 )
  System.out.println("It is 1");
else
  System.out.println("It is not 1");

以及使用goto

的工作原理
if ( y != 1 )
   goto not_1;

// this is the 'then' part:
System.out.println("It is 1");
goto done;   // we don't want to run the 'else' part!

not_1:
// this is the 'else' part
System.out.println("It is not 1");

done:

如果您理解这一点,那么switch语句不会有任何问题。 switch语句如下所示:

switch (y) { 
  case 1: ones++; break;
  case 2: tows++; break;
  default: System.out.println("Unexpected number of eyes: " + y);
}

它将y的值与case之后的所有值进行比较,如果匹配,则开始执行case处的代码。 break表示case已完成。 <{1}}'案例'在default s都不匹配时执行。

以下是基本上如何使用case

goto

我希望这会让事情变得更加清晰!

那就是说,你最好使用数组:

if ( y == 1 ) goto case_1;
if ( y == 2 ) goto case_2;

// here comes the default:
default:
System.out.println("Unexpected number of eyes: " + y);
goto switch_done;

case_1:
  ones++;
  goto switch_done; // this is the 'break' statement.

case_2:
  twos++;
  goto switch_done; 

switch_done:  // end of the switch.  

这也使您的打印时间缩短了:

int eyes[] = new int[] { 0,0,0,0,0,0 };

for ( int i = 1; i <= NUMBER_OF_ROLLS; i++ )
{
   int y = rand.nextInt(6) + 1;
   eyes[y] ++;
}

对于每个for ( int i = 0; i < eyes.length; i ++ ) System.out.printf( (i+1) + ": %.2f%%\n", 100 * eyes[i] / NUMBER_OF_ROLLS ); ,你基本上都在做同样的事情,你应该想尽可能少地编写代码:它更容易维护和理解,并且bug的可能性更小。

答案 1 :(得分:0)

非常相似。这两个几乎完全相同:

int x = 2;
if(x == 1) {
    System.out.println("1");
}
else if(x == 2) {
    System.out.println("2");
}
else {
    System.out.println("None of the above");
}
int x = 2;
switch(x) {
    case 1:
        System.out.println("1");
        break;
    case 2:
        System.out.println("2");
        break;
    default:
        System.out.println("None of the above");
        break;
}

答案 2 :(得分:0)

switch语句包含:

switch (y) {
  case 1:
    ones++;
    break;
  case 2:
    twos++;
    break;
...
}

等等,其中括号内的值是您要检查的变量名称,以及&#34; case&#34;之后的数字。是它可能发生的情况。你必须在你的指令结束后休息,告诉程序它可以在找到正确的一个并停止执行后退出switch语句。否则,如果你没有休息;命令在&#34;情况1&#34;阻止,它会继续执行每一行,直到它找到一个休息时间,并且两个&#34;那些&#34;和&#34; twos&#34;将被添加