Problème de jeu Java Dice


L'affectation consiste à permettre à un utilisateur de saisir une somme d'argent en tant que pari (ce nombre doit être supérieur à 0 pari>=1).

1) Deux dés (1-6) sont lancés.

2) Leur somme est calculée. Si cette somme est égale à 7, l'utilisateur gagne 4$ et si ils perdent, l'utilisateur perd 1$ (Ex: les entrées de l'Utilisateur 5$ comme mise de départ, gagne = 5+4=9$ maintenant–perd = 5-1 =4$ maintenant).

Une fois que l'utilisateur a joué, nous devons lui demander s'il aimerait jouer à nouveau, et essentiellement exécuter le programme à nouveau en utilisant un certain temps déclaration.

J'ai commenté les instructions to print aux lignes 43 et 50 car ce qui se passerait, c'est que ces deux lignes s'imprimeraient avant la question initiale de savoir combien l'utilisateur aimerait entrer (c'est pourquoi je les ai commentées).

Maintenant, le problème est qu'après que l'utilisateur a entré le montant qu'il/elle aimerait parier, le système calcule ensuite le montant qu'il gagne/perd et l'imprime. Cependant, il saute sur la déclaration d'impression en leur demandant s'ils aimeraient jouer Encore une fois. Pourquoi est-ce? Je sais que quelque chose ne va pas car au départ, le programme ignorait la première instruction d'impression et passait directement à la deuxième et à la troisième fonction. Toute aide?

Merci!

//Edit: si c'était pas déjà évident, je suis assez nouveau programme, n'hésitez pas à critiquer moi de toute façon ^^

  //Dice Game
//10/11/14
import java.util.Random;
import java.util.Scanner;

public class diceGame2
{
    //Instance Variables
    private String play = "yes";
    private int cash;
    private int sum;
    private int winnings;
    Scanner scan = new Scanner(System.in);
    Random rand = new Random();


    //Constructor
    public diceGame2()
    {
        cash=0;
        sum=0;
        winnings=0;
    }
    public void game()
    {
    do
    {
        System.out.println("Please enter the amount of money you would like to bet");
        cash=scan.nextInt();
        if(cash<1)
        {
            System.out.println("Please enter a bet greater than 1$.");
            cash=scan.nextInt();
        }
    }while((play.equals("yes")&&cash<0));
    }
    public int getDice()
    {

        int dice = rand.nextInt(6) + 1;
        System.out.println("The number rolled was a" + " " + dice);
        System.out.println();
        return dice;
    }
    public int getSum(int d1, int d2)
    {
        sum = d1+d2;
        System.out.println("Their sum is" + " " + sum + " " + "so...");
        System.out.println();
        return sum;
    }
    public int getWinnings(int sum)
    {
    if(sum==7)
    {
        cash += (4);
        System.out.println("You have won" + " " + "4$.");
    }
    else
    {
        cash -= (1);
        System.out.println("You have lost" + " " + "1$.");
    }
    System.out.println("You current have" + " " + cash  + " " + "dollars left to bet");
    return winnings;    
    }
    public String getPlay()
    {
        System.out.println("Do you want to play again");
        play = scan.next();
        return play;
    }

}//Class




//Dice Game Runner
//10/11/14
public class diceGameRunner
{
    public static void main(String[]args)
    {
    String play = "yes";
    while((play.equals("yes")))
    {
    diceGame2 d1 = new diceGame2();
    int dice1, dice2, sum;
    double money;

    d1.game();
    dice1 = d1.getDice();
    dice2 = d1.getDice();
    sum = d1.getSum(dice1, dice2);
    money = d1.getWinnings(sum);
    play = d1.getPlay();
    }


    }

}

Author: user3657449, 2014-10-12

1 answers

Il y a quelques problèmes avec votre code. Premièrement: Vous avez dit que sans l'instruction break, votre boucle while ne se casse jamais. C'est parce que la condition sera toujours vraie. Vous ne changez jamais la condition dans la boucle en la forçant toujours à être vraie.

Seconde: Vous avez " cash = - (-1);" Il y a un signe supplémentaire là - dedans.

Enfin (Plus d'une note latérale): Vous avez la boucle dans votre objet. Cela rendra difficile d'appeler l'une de vos méthodes et de faire du code clair. Essayer Déplacer la boucle while en dehors de votre objet et faire en sorte que les méthodes de l'objet n'effectuent qu'UNE seule tâche.

EDIT: Voici un exemple de code de ce que vous devez faire. Cela a été fait en ~ 10 minutes et devrait être modifié selon ce que vous voulez. C'est un exemple sur la façon dont vous devez configurer la classe et faire la boucle.

La méthode principale:

import java.util.Scanner;

/**
 *
 * @author Tyler Weaver
 */
public class Test {
    public static void main(String[] args) {
        String play = "yes";
        int cash;
        Scanner scan = new Scanner(System.in);

        do {
            System.out.printf("Enter cash amount: ");
            cash = scan.nextInt();
        } while (cash < 1);

        DiceGame game = new DiceGame(cash);

        while (play.equalsIgnoreCase("yes") && cash > 0) {
            int dice1 = game.roll();
            int dice2 = game.roll();

            game.calcCash(dice1 + dice2);
            cash = game.getCash();
            System.out.printf("Your new cash amount is $%,.2f%n", (float) cash);
            System.out.printf("Do you want to play again? ");

            play = scan.next();
        }
    }
}

Voici un exemple de ce à quoi la classe devrait ressembler moins les autres méthodes nécessaires:

import java.util.Random;

/**
 *
 * @author Tyler Weaver
 */
public class DiceGame {
    private int cash;
    private Random gen;

    public DiceGame(final int cash) {
        this.cash = cash;
        gen = new Random();
    }

    public int roll() {
        return gen.nextInt(6) + 1;
    }

    public void calcCash(final int sum) {
        cash += (sum == 7) ? 4 : -1;
    }

    public int getCash() {
        return cash;
    }
}

Ce n'est pas la réponse. Ceci est un exemple de code à partir de votre problème. Vous devrez comprendre comment mettre en œuvre exactement ce dont vous avez besoin.

Notez que la classe n'effectue qu'une seule opération par méthode. C'est juste une convention de codage. Notez également comment je demande de l'argent en dehors de la boucle dans la méthode principale et calcule à l'intérieur. Je demande également s'ils veulent jouer à nouveau à la fin de la méthode pour mettre à jour le " jeu " conditionnel. L'argent est mis à jour par des méthodes dans la classe.

 0
Author: Tyler Weaver, 2014-10-12 21:46:28