您的代码打算始终进入"for"循环,然后如果 numero == 0 ,则离开循环 .
for (int j = 0; j < numero; j++) {
if (numero == 0) {
break;
}
...
}
但是,如果numero == 0,则 for - j < numero 的条件为false,因此执行根本不会进入for循环 . 所以 break 永远不会运行 .
你可能想要更像的东西:
if(numero !=0) {
for (int j = 0; j < numero; j++) {
...
}
}
...虽然这里写的是 if 是无关紧要的,因为 for 循环仍然会循环零次 .
但是你的println()在循环中 - 它每次都会在“tails”被抛出时执行 . 我想你在抛出所有硬币之后真的想让println()发生一次:
if(numero !=0) {
for (int j = 0; j < numero; j++) {
...
}
System.out.println(...);
}
如果将其分解为更多方法,您会发现您的代码变得更加清晰 . 而不是将您的硬币投掷循环放在 if 语句中(这称为内联),将其放在自己的方法中,并在 for 循环中调用该方法 . 所以你最终得到这样的代码:
// Get input; play game until input is zero.
void playCoinTossGames(Scanner scanner) {
int input = promptAndGetInt(scanner);
while(input != 0) {
playOneCointossGame(input);
int input = promptAndGetInt(scanner);
}
// note two calls to get input above. This is called a
// "read-before-read-while" loop
}
// Print a prompt, then scan input for an integer
int promptAndGetInt(Scanner scanner) {
System.out.println("How many tosses? (0 to exit)";
return scanner.nextInt();
}
// Toss numberOfTosses times, then report the % of heads.
void playOneCointossGame(int numberOfTosses) {
for(int i=0; i
// Toss a coin and record result
}
System.out.println(...); // summary of results
}