我有这个滚动骰子的程序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;
答案 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;将被添加