2

I'm new to Java, I've been learning for about a month. One of the projects in class is to write a program where you bet on "horse" "races." Here's the code:

import java.util.Scanner;
import java.util.Random;
public class horsies {
    public static void main (String[] args) 
    {
        Scanner input = new Scanner(System.in);
        int money = 1000; //Set original $ to 1000
        int r; //Declare variable for random number of horse to proceed
        int races = 0; //Set total races to 0
        int garfwins = 0; //Set Garfield's score to 0
        int shaunwins = 0; //Set Shaun's score to 0
        int chestwins = 0; //Set Chester's score to 0
        int garf; //Declare Garfield's progress variable
        int shaun; //Declare Shaun's progress variable
        int chest; //Declare Chester's progress variable
        String response; //Declare variable to get input on continuing game
        String horse; //Declare variable to get input on horse
        String track = "------------";
        String trackgarf;
        String trackshaun;
        String trackchest;
        int bet = 0;
        do {
            garf = 0;
            shaun = 0;
            chest = 0;
            System.out.print ("You have $"+money+"\n");
            System.out.print ("Hi, which horse would you like to bet on?\n");
            System.out.print ("a. Garfield ("+garfwins+"/"+races+")\n");
            System.out.print ("b. Shaun ("+shaunwins+"/"+races+")\n");
            System.out.print ("c. Chester ("+chestwins+"/"+races+")\n");        
            horse = input.next();
            System.out.print ("How much do you want to bet?\n");
            bet = input.nextInt();
            if (bet <= 0) {
                System.out.print ("Invalid bet.\n");
            }
            else {
                while (garf<12 && shaun<12 && chest<12){
                    r = (int) (Math.random()*3+1);
                    if (r == 1) {
                        garf++;
                    } else if (r == 2) {
                        shaun++;
                    } else if (r == 3) {
                        chest++;
                    }
                    System.out.print ("\n\n\n\n\n\n\n\n\n\n\n\n");
                    trackgarf = track.substring(0, garf)+"1"; //Get Garf's progress on track
                    trackshaun = track.substring(0, shaun)+"1"; //Get Shaun's progress on track
                    trackchest = track.substring(0, chest)+"1"; //Get Chester's progress on track
                    System.out.print (trackgarf+"\n");
                    System.out.print (trackshaun+"\n");
                    System.out.print (trackchest+"\n");
                    System.out.print ("GAR:"+garf+"\nSHA:"+shaun+"\nCHE:"+chest+"\n");
                    try {
                          Thread.sleep(1000L);
                            }
                        catch (Exception j) {}
                }
            }
            if (garf == 12 && horse == "a") {
                System.out.print ("You earned $"+(2*bet));
                money = money + (2 * bet);
                System.out.print ("Total balance: $"+money);
            } else if (shaun == 12 && horse == "b") {
                System.out.print ("You earned $"+(2*bet));
                money = money + (2 * bet);
                System.out.print ("Total balance: $"+money);
            } else if (chest == 12 && horse == "c") {
                System.out.print ("You earned $"+(2*bet));
                money = money + (2 * bet);
                System.out.print ("Total balance: $"+money);
            }
            System.out.print ("Play again?\n");
            response = input.next();

        } while (money >= 0 && (response.equals("Yes")||response.equals("yes")));
        input.close();
        }
}

The program seems to work well, except for the fact that the money value seems to remain stuck at 1000. Any advice would be appreciated. Thanks!

Panah Neshati
  • 23
  • 1
  • 5
  • Thanks for the responses! @cerealy figured it out, I forgot to subtract the bet from the money. What I wrote was: System.out.print ("How much do you want to bet?\n"); bet = input.nextInt(); if (bet <= 0) { System.out.print ("Invalid bet.\n"); } But the correct code would've been: System.out.print ("How much do you want to bet?\n"); bet = input.nextInt(); if (bet <= 0) { System.out.print ("Invalid bet.\n"); } else { money = money - bet; Have a great day! – Panah Neshati Oct 17 '12 at 13:05

4 Answers4

2

You need to use equals() function rather than == operator.

For example

if (garf == 12 && horse == "a") { 

should be

if (garf == 12 && horse.equals("a")) { 
Zyga
  • 2,367
  • 3
  • 22
  • 32
  • Actually, even after that, I'm getting the same problem. When you try playing again, it shows the money as 1000 still. – Panah Neshati Oct 17 '12 at 12:48
  • @Abu its not a valid way of comparing String in Java. – Zyga Oct 17 '12 at 12:49
  • @Panah Did yuo change the == to equals for every comparison (ie. in 3 if statements)? – Zyga Oct 17 '12 at 12:54
  • Thanks @Zyga, just used your tip to fix the code near the end for displaying the money left over. I also used the or operator "||" in the if statement to whittle down the length of the code, and fixed a mistake where the payout was 1:1. – Panah Neshati Oct 17 '12 at 13:34
2

The problem you have that all of your conditions return false and you do not have any else clause.

The reason why they are false is that you perfrom invalid compare over String type.

so instead having

horse == "a", you should have "a".equals(horse).

Or you can switch to primitive type char then horse == 'a' will be correct.

In Java operator == compare the reference for Object type and value for primitive.

So every ware you are using Object types you should keep in mind to use equals method instead of ==

1

And you don't subtract anything from the money variable. You should do it when you make the bet

cerealy
  • 122
  • 6
0

When your horse loses, Your code does make any change in the money so balance remains 1000

else       {
            System.out.print ("You lost $"+(bet)+" bucks in this race\n");
            money = money - (bet);
            } System.out.print ("Play again?\n Balance :"+money);

Add a else statement to your loop

Selva Kumaran
  • 81
  • 1
  • 3