如何压缩比较四个不同的字符串,看看是否有任何匹配?

时间:2016-11-10 23:05:04

标签: java arrays string random

我正在创建一个有四种可能结果的老虎机。如果有两个匹配,则打印message2;三场比赛,message3打印;四场比赛,留言4打印。

我理解并非所有代码都是高效的,但我试图解决的是压缩(或替换)我的嵌套if语句。你会怎么做的?

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) ;
  }
}

1 个答案:

答案 0 :(得分:0)

您可以创建包含多个相等值的Map,如下所示:

Map<String, Integer> result = new HashMap<String, Integer>();
int maxRes = 0; 
for(o in outcome) {
  if(!result.contains(o)) {
     result.put(o, 1);
  } else {
     result.put(o, result.get(o)+1);
  }
  maxRes = Math.max(maxRes, result.get(o));
}

// TODO: output according to maxRes value