Я пытаюсь сделать небольшую программу, которая бросает "reservaDados" количество игральных костей и сравнивает "dado" (которое является числом от 1 до 10) с указанной трудностью. Затем я хочу напечатать количество выходов, сбоев и ультра-сбоев, но, похоже, у меня проблема с количеством раз, когда цикл работает, он печатает только 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++;
            }
        }
    }
}
0
user7128116 25 Ноя 2016 в 15:08

2 ответа

Лучший ответ

В последней итерации подсчет больше не производится, выводится только результат. Таким образом, вы фактически пропустите одну итерацию.

Можно исправить, удалив первый else или выполнив одну дополнительную итерацию.

Но просто возьмите распечатку всего результата из цикла и поместите его сразу после цикла. Это сделает цель кода более ясной.

1
Thilo 25 Ноя 2016 в 12:15

Тило прав, на последнем проходе цикла он не считает кости, потому что сначала это отпечаток, я просто взял отпечаток и вставил его в конце следующим образом:

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");}
}

} }

И это было исправлено, спасибо!

0
user7128116user7128116 25 Ноя 2016 в 12:22