Основная проблема в вашем коде, похоже, заключается в понимании проблемы. Я посмотрел на страницу Github, на которую вы ссылались (я заметил, что ваше назначение должно быть завтра - пожалуйста, не ждите до последней минуты, чтобы попросить о помощи в будущем, и всегда сначала спрашивайте учителя, а не незнакомца о переполнении стека)). Давайте разберем назначение правильно.
Игрок начинает с денег (в вашем случае, 2 единицы), поэтому мы знаем, как инициализировать startCash
, что вы сделали правильно
ЕгоЦель состоит в том, чтобы добраться до 10 юнитов или перебрать, чтобы мы знали верхний и нижний пределы, определяющие параметры его участия в игре. Другими словами, он играет только тогда, когда у него> 0 и <10 единиц. Внешняя петля, проверяющая, достаточно ли у него денег, бессмысленна. </p>
Хотя эти условия выполняются, он играет в игру с переворачиванием монет, где 50 или меньше - это проигрыш одной единицы, а 51 или больше - выигрыш. одной единицы. Каждый раз, когда он подбрасывает, мы увеличиваем счетчик, чтобы знать, сколько монет он подбросил, чтобы получить либо 0, либо 10.
Обратите внимание, как я перефразировал вопрос: «Наличные> 0 и наличные <10,флип монета. Если сальто <50, проигрыш игрока, иначе победа. Счетчик приращений. Это все, что нужно сделать, все в одном цикле. </p>
Вы запутали себя, добавив внешний цикл, который вам совсем не нужен - может быть, вы положили его туда, чтобы продолжать переворачивать, пока у игрока есть деньги,но это избыточно, потому что ваш do...while
проверяет нижний и верхний пределы того, следует ли играть в игру. Этот внешний цикл также выполняется 5 раз, но что, если для разорения или получения 10 потребуется более 5 попыток?
Я упростил здесь код, в основном переставив то, что у вас уже было. Сравните то, что у вас есть, с тем, что у меня есть, и вы увидите, что я более или менее просто отбросил бесполезную внешнюю петлю. Запустите код несколько раз, и вы увидите, что у вас уже была более или менее правильная логика, прежде чем вы застрелились в ноге.
import java.security.SecureRandom;
public class Homework
{
public static void main(String[] args)
{
int startCash = 2;
int endCash = 10;
int currentCash = startCash;
int counter = 0;
while(currentCash > 0 && currentCash < endCash)
{
SecureRandom randomNumber = new SecureRandom();
int number = randomNumber.nextInt(101);
if(number <= 50)
{
// lost
currentCash--;
}
else
{
// won
currentCash++;
}
counter++;
}
System.out.println("Current Cash: " + currentCash);
System.out.println("Trials: " + counter);
}
}
Единственное «важное» изменение, кроме удаления лишнего цикламеняет ваш do...while
в while
цикл. Разница в том, что do...while
всегда будет запускаться хотя бы один раз, потому что условие выхода не проверяется до тех пор, пока не будет запущен блок кода, что кажется неправильным, потому что, если startCash
уже равен 0 или 10? Цикл while
проверяет условие перед запуском блока кода, поэтому, если игрок не может играть (слишком много или слишком мало денег), он не играет.