Как продолжить цикл на основе пользовательского ввода в Java-программе - PullRequest
1 голос
/ 03 мая 2019

У меня есть лотерейная программа, которая запускает ставки и генерирует случайные числа. Когда пользователь выигрывает до 5000 долларов, у него будет возможность обналичить 5000 долларов и использовать оставшийся баланс для продолжения цикла. Пользователь также сможет завершить цикл, если решит не обналичивать деньги. Как мне продолжить цикл на основе пользовательского ввода? Если пользователь пишет «да», цикл продолжится, но я не уверен, как это сделать. Может кто-нибудь, пожалуйста, помогите? Если предполагается, что цикл будет продолжаться, то есть 5000 долларов будут удалены из общего выигрыша пользователя из-за вывода средств, оставшийся баланс будет использован для игры.

Я пытался поместить оператор if для пользовательского ввода в нескольких местах в основном цикле, но бюджет пользователя продолжает увеличиваться, он не вычитает 5000 долларов.

java.util.Scanner
while (budget > 0) {

                lottery = (int) (Math.random() * 100);
                guess = (int) (Math.random() * 100);

                budget -= 1;    // budget = budget-1;
                // Get digits from lottery
                int lotteryDigit1 = lottery / 10;
                int lotteryDigit2 = lottery % 10;

                // Get digits from guess
                int guessDigit1 = guess / 10;
                int guessDigit2 = guess % 10;

                System.out.println("The lottery number is " + lottery);
                System.out.println("The computer picked number is " + guess);

                // Check the guess
                if (guess == lottery) {
                    System.out.println("Exact match: you win $10,000");
                    totalWin += 1000;
                } else if (guessDigit2 == lotteryDigit1 && guessDigit1 == lotteryDigit2) {
                    System.out.println("Match all digits: you win $3,000");
                    totalWin += 300;
                } else if (guessDigit1 == lotteryDigit1 || guessDigit1 == lotteryDigit2 || guessDigit2 == lotteryDigit1
                        || guessDigit2 == lotteryDigit2) {

                    System.out.println("Match one digit: you win $1,000");
                    totalWin += 100;
                } else
                    System.out.println("Sorry, no match");

                budget += totalWin;
                totalWin=0;

                if (budget > initBudget)
                    if ((budget-initBudget) >= 5000) {

                        System.out.println("You have reached the goal of 5000, we can go home!");
                        System.out.println("Enter 1 if you would like to cash out and use remaining balance to play and 0 if you would like to stop");
                        int decison = input.nextInt();
                        if (decison==1){budget=budget-5000;
                        System.out.println("Budget After play " + budget);
                        continue;
                        }break;


                    } 

                System.out.println("Budget After play " + budget);

            }

Так что в моем коде у меня есть цикл

System.out.println("Enter 1 if you would like to cash out and use remaining balance to play and 0 if you would like to stop");
int decison = input.nextInt();
    if (decison==1){budget=budget-5000;
System.out.println("Budget After play " + budget);
continue;
}break;
} 

Этот цикл должен получить пользовательский ввод, а затем вычесть 5000 из общего выигрыша и использовать оставшийся бюджет, чтобы продолжить игру ... но он только увеличивается. Не понимаю, почему оно увеличивается, если у меня -5000.

(если возможно, пожалуйста, помогите мне изменить ответ на да / нет вместо ввода 1)

Ответы [ 3 ]

2 голосов
/ 03 мая 2019

Я предположил, что вы используете java.util.Scanner.Вот ответ;

System.out.println("Enter yes if you would like to cash out and use remaining balance to play and no if you " +
                "would like to stop");
String decison = input.nextLine();
if ("yes".equals(decison))
{
    budget = budget - 5000;
    System.out.println("Budget After play " + budget);
    continue;
}
break; // break the statement.
1 голос
/ 03 мая 2019

Эрчин Акчай объяснил, как изменить ввод с int на String.

Я посмотрел на ваш код и создал с помощью него работающий метод main, и он работает так, как вы ожидаете. Возможно, факт, что это должно быть 5k от начального бюджета, сбивает с толку?

if ((budget - initBudget) >= 5000)

Вот весь класс, который я использовал для проверки вашего кода, если он полезен:

import java.util.Scanner;

public class Test {
    private static int budget;
    private static int lottery;
    private static int guess;
    private static int totalWin;
    private static int initBudget = 4500;

    public static void main(String[] args) throws InterruptedException {
        Scanner input = new Scanner(System.in);
        budget = initBudget;

        while (budget > 0) {

            lottery = (int) (Math.random() * 100);
            guess = (int) (Math.random() * 100);

            budget -= 1;    // budget = budget-1;
            // Get digits from lottery
            int lotteryDigit1 = lottery / 10;
            int lotteryDigit2 = lottery % 10;

            // Get digits from guess
            int guessDigit1 = guess / 10;
            int guessDigit2 = guess % 10;

            System.out.println("The lottery number is " + lottery);
            System.out.println("The computer picked number is " + guess);

            // Check the guess
            if (guess == lottery) {
                System.out.println("Exact match: you win $10,000");
                totalWin += 1000;
            } else if (guessDigit2 == lotteryDigit1 && guessDigit1 == lotteryDigit2) {
                System.out.println("Match all digits: you win $3,000");
                totalWin += 300;
            } else if (guessDigit1 == lotteryDigit1 || guessDigit1 == lotteryDigit2 || guessDigit2 == lotteryDigit1
                    || guessDigit2 == lotteryDigit2) {

                System.out.println("Match one digit: you win $1,000");
                totalWin += 100;
            } else {
                System.out.println("Sorry, no match");
            }

            budget += totalWin;
            totalWin = 0;

            if (budget > initBudget) {
                if ((budget - initBudget) >= 5000) {

                    System.out.println("You have reached the goal of 5000, we can go home!");
                    System.out.println(
                            "Enter 1 if you would like to cash out and use remaining balance to play and 0 if you "
                                    + "would like to stop");
                    int decison = input.nextInt();
                    if (decison == 1) {
                        budget = budget - 5000;
                        System.out.println("Budget After play " + budget);
                        continue;
                    }
                    break;


                }
            }

            System.out.println("Budget After play " + budget);

        }
    }
}
0 голосов
/ 03 мая 2019

Вы можете изменить свой код следующим образом:

System.out.println("Enter yes if you would like to cash out and use remaining balance to play and no if you would like to stop");
String decision = input.next();
if ("Yes".equalsIgnoreCase(decision)) { // Cashing Out
    budget = budget - 5000;
    System.out.println("Budget After play " + budget);
    continue;
}
break; // breaking the loop (if user enters anything other than yes)

Здесь я использовал String (чтобы сохранить ответ пользователя в виде слова). Если он введет Yes, yes или YES (игнорируя регистр, будет считаться, что пользователь хочет обналичить), цикл не будет разорван.

...