2015-12-11 2 views
0

Я приспосабливаюсь заранее, если это дубликат любого типа, но я не мог найти ничего, что касалось моей конкретной проблемы.Java - Основной метод с ошибкой порядка печати ошибки If

Вот моя программа:

import java.util.Random; 
 

 
public class CarnivalGame{ 
 

 
    public static void main(String[] args){ 
 

 
     int count = 0; 
 
     int wins = 0; 
 
     for (int i = 0; i < 101; i++){ 
 
      System.out.println("Roll " + count); 
 
      count = count + 1; 
 
      int die1=(dieRoll(6)); 
 
      int die2=(dieRoll(20)); 
 
      int die3=(dieRoll(8)); 
 
      int die4=(dieRoll(4)); 
 
      int die5=(dieRoll(12)); 
 
      int sum = die1+die2+die3+die4+die5; 
 
      System.out.println("Total: " + sum + "\n"); 
 

 
      if ((sum >= 35) || (sum < 20)){ 
 
      System.out.println("Player wins!\n"); 
 
      wins = wins + 1; 
 
    } 
 
    if (count == 100){ 
 
    //PROBLEM AREA 
 
    System.out.printf("After 100 rolls, the player has won for a total of %d times!\n", wins); 
 
    } 
 
    }//end for loop 
 
    }//end main 
 

 
public static int dieRoll(int sides){ 
 
    int num = 0; 
 
    int roll = 0; 
 
    Random rng = new Random(); 
 
    if(sides >=4){ 
 
     for(int i = 0; i < 1; i++){ 
 
     roll = rng.nextInt(sides)+1; 
 
     System.out.println("Roll is: " + roll); 
 
     num = num + roll; 
 
     }//end for loop 
 
    }//end if 
 
return num; 
 
    }//end method 
 
}//end class

Что в данный момент печатает:

Количество рулет = 100 в этом примере

For loop (x100): 

---> "After 100 rolls, the player has won for a total of (wins) times!" Roll (count) 

    Roll is: dieRoll(x) 
    Roll is: dieRoll(x) 
    Roll is: dieRoll(x) 
    Roll is: dieRoll(x) 
    Roll is: dieRoll(x) 
    Total: sum 

    if ((sum >= 35) || (sum < 20)) 
    "Player wins!" 

Что я пытаясь распечатать его:

То же самое точное, но с

if ((sum >= 35) || (sum < 20)) 
     "Player wins!" 
---> "After 100 rolls, the player has won for a total of (wins) times! 

Поэтому в основном я пытаюсь выяснить, почему моя проблема область печати вместе с графом крену, где она должна быть печать после того, как сумма и «игрок выигрывает! "

Я предполагаю, что это ошибка с форматированием форматирования if, но я не могу понять, как это исправить. Спасибо за ваше время.

+5

Отредактируйте свой код правильно, чтобы вы могли видеть, как ifs, fors и т. Д. Вложены! Поместите код для печати результата вне цикла for. Теперь он находится внутри цикла for. – Jesper

+0

ОК, извините, у меня есть плохая привычка не отступать! – Synth

+0

@ nukacola7 Если вы находитесь на Eclipse, используйте 'Ctrl + i' для правильного отступ. –

ответ

0

Извините, ребята, действительно глупо логическая ошибка с моей стороны. Вот решение моей проблемы, как предположил Джеспер и Кальвин П., мне просто пришлось поставить проблемную область после цикла for. Я думал, что должен держать его в цикле. Спасибо всем за помощь!

import java.util.Random; 

public class CarnivalGame 
{ 
public static void main(String[] args) 
{ 
int count = 0; 
int wins = 0; 
for (int i = 0; i < 100; i++) 
{ 
System.out.println("Roll " + (i + 1)); 
count = count + 1; 
int die1=(dieRoll(6)); 
int die2=(dieRoll(20)); 
int die3=(dieRoll(8)); 
int die4=(dieRoll(4)); 
int die5=(dieRoll(12)); 
int sum = die1+die2+die3+die4+die5; 
System.out.println("Total: " + sum + "\n"); 

if ((sum >= 35) || (sum < 20)){ 
System.out.println("Player wins!\n"); 
wins = wins + 1; 
} 
if (count == 100){ 
//FIXED PROBLEM 
System.out.printf("After 100 rolls, the player has won for a total of %d times!\n", wins); 
} 
}//end for loop 
}//end main 

public static int dieRoll(int sides) 
{ 
    int num = 0; 
    int roll = 0; 
    Random rng = new Random(); 
    if(sides >=4) 
     { 
     for(int i = 0; i < 1; i++) 
     { 
     roll = rng.nextInt(sides)+1; 
     System.out.println("Roll is: " + roll); 
     num = num + roll; 
    }//end for loop 
    }//end if 
return num; 
}//end method 

}//end class 
+0

Пожалуйста, не забудьте проголосовать за любой ответ, который помог вам, и принять тот ответ, который помог больше всего. –

2

Ваша проблема заключается в том, что ваша петля имеет 101 итерацию от 0 до 100. Итак, после номера 99 ваши 100 бросков в кости закончились, и тогда вы снова катитесь еще раз. Просто измените цикл, чтобы перейти от 0 до 99 (i < 100 вместо 101).

Edit (в основном потому, что я не могу ответить вам прямо еще):

Как вы (TRY) итерировать 100 раз в любом случае, я не понимаю, почему вы должны иметь переменную count на всех , Просто позвольте вашей петле бросить кубик сто раз, добавить победы, а затем распечатать ваше заявление впоследствии.

+0

Просто осознал это, а также ха-ха. Вы должны использовать это, но также по-прежнему перемещать результаты после цикла. Затем вы можете полностью исключить свою переменную 'count'. Изменить: oh и изменить 'System.out.println (« Roll »+ count);' to 'System.out.println (« Roll »+ (i + 1));' –

+0

@ChristianW спасибо, не понимал, что либо – Synth

+0

@CalvinP. спасибо человеку, которого вы MVP :) – Synth

0

count Ваших переменная всегда один впереди вашего итератора переменной i, потому что вы увеличиваете его очень рано в цикле. Таким образом, вы достигнете счета == 100, в то время как i все еще 99.

Переместите свой выход до увеличения количества отсчетов ИЛИ, возможно, в конце цикла.

+0

это согласуется с ответом Кристиана В? Что бы он сказал, исправить то, что вы говорите? – Synth

+0

более или менее - убедитесь, что вы никогда не вошли в цикл снова после того, как выход исправит это так же хорошо ;-) – Jan

+0

ok спасибо за вход, очень ценим! – Synth

Смежные вопросы