掷骰子 Java returns 更少的随机结果
Dice roller Java returns less random results
我正在尝试制作一个小程序,它会抛出 "reservaDados" 个骰子并将 "dado"(1-10 之间的数字)与指定的难度进行比较。然后我想打印退出、失败和 ultrafails 的次数,但我似乎对循环工作的次数有疑问,它只打印 9 个结果而且我似乎没有找到原因,我想它必须与计数器 i 做些什么?
import java.util.*;
public class ProgramTUI {
public static void main(String[] args) {
Scanner var = new Scanner(System.in).useLocale(Locale.ENGLISH);
System.out.print("Cuantos dados lanzas?");
int reservaDados = var.nextInt();
System.out.print("Cual es la dificultad?");
int dificultad = var.nextInt();
int i = 0;
int numero_exitos = 0;
int numero_fracasos = 0;
int numero_pifias = 0;
while (i < reservaDados) {
i++;
int dado = (int) (Math.random() * 10) + 1;
if (reservaDados == i) {
System.out.println("Has sacado " + numero_exitos + " exitos, " + numero_fracasos
+ " fracasos, " + numero_pifias + " pifias");
} else if (dado == 1) {
numero_pifias++;
} else if (dado < dificultad) {
numero_fracasos++;
} else {
numero_exitos++;
}
}
}
}
在最后一次迭代中,不再进行计数,只打印结果。所以你实际上错过了一次迭代。
可以通过删除第一个 else
或进行一次额外的迭代来修复。
但只需将整个结果打印出循环并将其直接放在循环之后。这将使代码的意图更加清晰。
Thilo 是对的,在循环的最后一次它不计算骰子,因为先有一个印刷品,我只是把印刷品拿出来,然后像这样粘贴在最后:
import java.util.*;
public class ProgramTUI {
public static void main(String[] args) {
Scanner var = new Scanner(System.in).useLocale(Locale.ENGLISH);
System.out.print("Cuantos dados lanzas?");
int reservaDados= var.nextInt();
System.out.print("Cual es la dificultad?");
int dificultad= var.nextInt();
int i=0;
int numero_exitos=0;
int numero_fracasos=0;
int numero_pifias=0;
while (i < reservaDados){
i++;
int dado= (int) (Math.random() * 10) + 1;
if (dado == 1) {numero_pifias++;}
else if (dado < dificultad) {numero_fracasos++;}
else {numero_exitos++;}
if (reservaDados == i){System.out.println("Has sacado "+numero_exitos+" exitos, "+numero_fracasos+" fracasos, "+numero_pifias+" pifias");}
}
}
}
已修复,谢谢!
我正在尝试制作一个小程序,它会抛出 "reservaDados" 个骰子并将 "dado"(1-10 之间的数字)与指定的难度进行比较。然后我想打印退出、失败和 ultrafails 的次数,但我似乎对循环工作的次数有疑问,它只打印 9 个结果而且我似乎没有找到原因,我想它必须与计数器 i 做些什么?
import java.util.*;
public class ProgramTUI {
public static void main(String[] args) {
Scanner var = new Scanner(System.in).useLocale(Locale.ENGLISH);
System.out.print("Cuantos dados lanzas?");
int reservaDados = var.nextInt();
System.out.print("Cual es la dificultad?");
int dificultad = var.nextInt();
int i = 0;
int numero_exitos = 0;
int numero_fracasos = 0;
int numero_pifias = 0;
while (i < reservaDados) {
i++;
int dado = (int) (Math.random() * 10) + 1;
if (reservaDados == i) {
System.out.println("Has sacado " + numero_exitos + " exitos, " + numero_fracasos
+ " fracasos, " + numero_pifias + " pifias");
} else if (dado == 1) {
numero_pifias++;
} else if (dado < dificultad) {
numero_fracasos++;
} else {
numero_exitos++;
}
}
}
}
在最后一次迭代中,不再进行计数,只打印结果。所以你实际上错过了一次迭代。
可以通过删除第一个 else
或进行一次额外的迭代来修复。
但只需将整个结果打印出循环并将其直接放在循环之后。这将使代码的意图更加清晰。
Thilo 是对的,在循环的最后一次它不计算骰子,因为先有一个印刷品,我只是把印刷品拿出来,然后像这样粘贴在最后:
import java.util.*;
public class ProgramTUI {
public static void main(String[] args) {
Scanner var = new Scanner(System.in).useLocale(Locale.ENGLISH);
System.out.print("Cuantos dados lanzas?");
int reservaDados= var.nextInt();
System.out.print("Cual es la dificultad?");
int dificultad= var.nextInt();
int i=0;
int numero_exitos=0;
int numero_fracasos=0;
int numero_pifias=0;
while (i < reservaDados){
i++;
int dado= (int) (Math.random() * 10) + 1;
if (dado == 1) {numero_pifias++;}
else if (dado < dificultad) {numero_fracasos++;}
else {numero_exitos++;}
if (reservaDados == i){System.out.println("Has sacado "+numero_exitos+" exitos, "+numero_fracasos+" fracasos, "+numero_pifias+" pifias");}
}
} }
已修复,谢谢!