jeudi 10 novembre 2016

How to condensely compare four different strings to see if there are any matches?

I'm creating a slot machine with four possible outcomes. If there are two matches, message2 prints; three matches, message3 prints; four matches, message4 prints.

I understand not all of the code is efficient, but what I'm trying to get at is to condense (or replace) my nested if statements. How would you have done it?

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

/**
 *Description: Slot machine simulator.
 *
 * @author KO
 */
public class SlotMachine {
public static void main(String [] args) {

    //delcaring variables
    int      repeat     = 0 ;

    //welcoming
    System.out.println("Welcome to the slot machine sim!") ;

    //loop for slot machine
    do {
        //declaring variables
        double   bet        = 0 ;
        int      i          = 0 ;
        int      select     = 0 ;
        String   message0   = null ;
        String   message2   = null ;
        String   message3   = null ;
        String   message4   = null ;
        String[] outcome    = new String[4] ;
        String[] possible   = {"CHERRIES", "ORANGES", "PLUMS", "BARS" } ;

        Random  random      = new Random() ;
        Scanner keyboard    = new Scanner(System.in) ;        

        //ask for bet
        System.out.println("\nHow much are you betting?") ;
        bet = keyboard.nextDouble() ;

        //set messages
        message0   = "\n\nZero matches. You won $0." ;
        message2   = "\n\nTwo matches. You won $"   + (bet * 2) ;
        message3   = "\n\nThree matches. You won $" + (bet * 3) ;
        message4   = "\n\nFour matches. You won $"  + (bet * 3) ;

        //creating white space
        System.out.println(" ") ;

        //randomizer
        for (i = 0 ; i < 4 ; i++) {
            select     = random.nextInt(possible.length) ;
            outcome[i] = possible[select] ;
        }

        //print outcome
        for (i = 0 ; i < 4 ; i++) {
            System.out.print(outcome[i] + " ") ;
        }

        //compare
        if (outcome[0].equals(outcome[1])) {
            if (outcome[0].equals(outcome[2])) {
                if (outcome[0].equals(outcome[3])) {
                    System.out.println(message4);
                } else {
                    System.out.println(message3) ;
                }
            } else if (outcome[0].equals(outcome[3])) {
                System.out.print(message3) ;
            } else {
                System.out.println(message2) ;
            }
        } else if (outcome[0].equals(outcome[2])) {
            if (outcome[0].equals(outcome[3])) {
                System.out.println(message3) ;
            } else {
                System.out.println(message2) ;
            }            
        } else if (outcome[0].equals(outcome[3])) {
            System.out.println(message2) ;
        } else if (outcome[1].equals(outcome[2])) {
            if (outcome[1].equals(outcome[3])) {
                System.out.print(message3) ;
            } else {
                System.out.println(message2) ;
            }
        } else if (outcome[1].equals(outcome[3])) {
            System.out.println(message2);
        } else if (outcome[2].equals(outcome[3])) {
            System.out.println(message2) ;
        } else {
            System.out.println(message0) ;
        }

        //restart application
        System.out.println("\n\nWould you like to play again? (1 or 2)"
                + "\n1. Yes"
                + "\n2. No") ;
        repeat = keyboard.nextInt() ;
    } while (repeat == 1) ;
  }
}




Aucun commentaire:

Enregistrer un commentaire