user2053184
user2053184

Reputation:

How to assign a random number a string value in my program

as the title suggests I am doing a program for homework that is a slot machine. I have searched around and I am pretty satisfied that the program works correctly enough for me. The problem Im having is on top of generating the random numbers, I am supposed to assign values for the numbers 1-5 (Cherries, Oranges, Plums, Bells, Melons, Bars). Then I am to display the output instead of the number when my program runs. Can anyone get me pointed in the right direction on how to do this please?

import java.util.Random;
import java.util.Scanner;



public class SlotMachineClass {


public static void main(String[] args) {

    Scanner input = new Scanner(System.in);

    int Coins = 1000;
    int Wager = 0;




    System.out.println("Steve's Slot Machine");
    System.out.println("You have " + Coins + " coins.");
    System.out.println("Enter your bet and press Enter to play");




    while (Coins > 0)
    {
    int first = new Random().nextInt(5)+1;
    int second = new Random().nextInt(5)+1;
    int third = new Random().nextInt(5)+1;

    Wager = input.nextInt();

    if(Wager > Coins)
             Wager = Coins;

    System.out.println(first + " " + second + " " + third);


    if(first == second && second == third)
    { Coins = Coins + (Wager * 3);
         System.out.println("You won " + (Wager * 3) + "!!!!" + " You now have " + Coins + " coins.");
         System.out.println("Enter another bet or close program to exit");}

    else if((first == second && first != third) || (first != second && first == third) || (first != second && second == third))
    { Coins = Coins + (Wager * 2);
         System.out.println("You won " + (Wager * 2) + "!!!" + " You now have " + Coins + " coins.");
         System.out.println("Enter another bet or close program to exit");}

    else {Coins = Coins - Wager;  
    System.out.println("You Lost!" + "\nPlay Again? if so Enter your bet.");}



    }

    while (Wager == 0)
    {
        System.out.println("You ran out of coins. Thanks for playing."); 
    }


}

}

Upvotes: 3

Views: 5508

Answers (5)

Andrew Bissell
Andrew Bissell

Reputation: 2867

The non-array solution most likely to be used a by new programmer in an intro course would be a nested if-else:

String fruitToPrint = "";
if (num == 0)
   fruitToPrint = "Cherries";
else if (num == 1)
   fruitToPrint = "Oranges";
else if (num == 2)
   fruitToPrint = "Plums";
else if (num == 3)
   fruitToPrint = "Bells";
else if (num == 4)
   fruitToPrint = "Melons";
else if (num == 5)
   fruitToPrint = "Bars";
else
   System.out.println("Couldn't assign fruit from num=" + num);

System.out.println("The corresponding fruit was " + fruitToPrint); 

Upvotes: 0

Andrew Bissell
Andrew Bissell

Reputation: 2867

Here's an alternative solution to the question which I think follows best programming practices. This is probably even less allowed for your assignment than an array, and will be a dead giveaway that you got your answer on StackOverflow, but the problem would lend itself to using an enum type with an int->enum mapping:

enum Fruit {
   Cherries(1), 
   Oranges(2), 
   Plums(3), 
   Melons(4), 
   Bars(5);

   private static final Map<Integer, Fruit> lookupMap = new HashMap<Integer, Fruit>();
   static {
      for (Fruit fruit : Fruit.values()) {
         lookupMap.put(fruit.getLookup());
      }
   }

   static Fruit fromLookup(int lookup) {
      return lookupMap.get(lookup);
   }

   private final int lookup;       

   private Fruit(int lookup) {
      this.lookup = lookup;
   }

   int getLookup() {
      return lookup;
   }
}

void printEnumExample() {
   int fruitToPrint = 4;
   System.out.println(Fruit.fromLookup(fruitToPrint)); // <- This will print "Melons"
}

Upvotes: 0

Marc Laugharn
Marc Laugharn

Reputation: 1357

You need a lookup table:

String[] text = new String[] {"Cherry", "Bell", "Lemon", "Bar", "Seven"};

Then you can just do

System.out.println(text[first] + " " + text[second] + " " + text[third]);

without creating more methods.

Upvotes: 2

Param
Param

Reputation: 2540

Create an array:

String[] s = {Cherries, Oranges, Plums, Bells, Melons, Bars};

Then you can print s[num-1] instead of num (where num is the random int). E.g. if your random int came out to be 2, print s[2-1] i.e. s[1] which will be Orange.

Upvotes: 0

Todd
Todd

Reputation: 31700

If you have an int and want to have some String associated with that, there are a couple of ways to do that.

The first one is to have an array of Strings and look them up.

public static String[] text = new String[] {"Cherry", "Bell", "Lemon", "Bar", "Seven"};
public String getNameForReel(int reelValue) {
    return text[reelValue];
}
// And to call it...
System.out.println(getNameForReel(first)); //etc...

Or, you can do it in a switch statement (I don't prefer this, but you might):

public String getNameForReel(int reelValue) {
    switch(reelValue) {
       case 0: return "Cherry";
       case 1: return "Bell";
       case 2: return "Lemon";
       case 3: return "Bar";
       case 4: return "Seven";
    }
}

Upvotes: 4

Related Questions