Как заставить метод распечатать количество раз, когда конкретное число было свернуто?
Я должен сделать программу для игры в кости. программа спросит, сколько раз вы хотите бросить кости, а затем спросит, для какого числа вы хотите получить статистику (2-12). Затем он бросает кубик (x) количество раз и выдает количество бросков каждый раз. затем он сообщит вам количество раз, которое выпало каждое число (2-12), и должно завершиться с программой, сообщающей вам, какой процент от числа, которое вы запросили, чтобы просмотреть статистику (пример: из 25 бросков костей), К 2 рулонам добавлено 10. Процент 10 рулонов составляет 8%).
я должен использовать методы для этой программы, и мой метод статистики выводит 1 вместо того, чтобы сколько-нибудь раз 7 показывает (я использую 7 как своего рода тестер для того, что я делаю, так как 7, как предполагается, всплывает много во время игральные кости).
Я использую Drjava, и я не должен использовать отладчик для своих программ, так как наш инструктор еще не научил нас, как это сделать! я думаю, что мой цикл - проблема, потому что я пытаюсь заставить d напечатать.
Кроме того, как я могу найти процент раз, когда мой выбранный номер был свернут?
import java.util.*;
public class EZD_diceRoll
{
public static void main(String args[])
{
EZD_diceRoll.roll();
EZD_diceRoll.statistics(d);
}
private static int die1;
private static int die2;
private static int total;
public static int number;
public static int d;
public static int times;
public static void roll()
{
Random nums = new Random();
Scanner kbReader = new Scanner(System.in);
System.out.print("How many times would you like to roll?");
times = kbReader.nextInt();
System.out.print("What number (dice roll total) do you want the statistics
for (2 - 12)?");
number = kbReader.nextInt();
for(int a = 1; a < times + 1; a++)
{
die1 = 1 + nums.nextInt(6);
die2 = 1 + nums.nextInt(6);
total = die1 + die2;
System.out.println("Dice roll #" + a + " is " + total);
}
}
public static void statistics(int d)
{
for(int c = 0; c < times + 1; c++)
{
if(total == 7)
{
d++;
}
}
System.out.println("The number of 7's thrown was " + d);
}
}
2 ответа
Использовать java.util.HashMap
,
HashMap<Integer, Integer> map = new HashMap<>();
Ключ представляет конкретное число, значение представляет частоту. Когда вы получите номер, проверьте, существует ли он на карте. Если нет, поместите это в карту с начальной частотой 1
, В противном случае увеличьте значение.
Инициализировать счетчики (int var) для выходных значений костей (2-12) и использовать инструкцию switch внутри для цикла, для каждого броска выводить регистр внутри переключателя и счетчик приращений для каждого случая, и эти значения счетчика дают количество раз, когда значение бросается,
Приведенный ниже код печатается для каждого броска, если вам нужно только окончательное число, просто используйте все операторы system.out.print вне (после) цикла for вместо их использования в операторе case.
int[] count=new int[10] //counter for values 2-12
for(int a = 0; a < times + 1; a++)
{
die1 = 1 + num.nextInt(6);
die2 = 1 + num.nextInt(6);
total = die1 + die2;
switch(total)
{
case 2:
count[0]++;
System.out. print("dice 2 rolled" +count[0] +" time");
break;
case 3:
count[1]++;
System.out. print("dice 3 rolled" +count[1] +" time");
break;
case 4:
count[2]++;
System.out. print("dice 4 rolled" +count[2] +" time");
break;
.
.
.
.
case 12:
count[10]++;
System.out. print("dice 12 rolled" +count[10] +" time");
break;
}}