2015-11-28 4 views
-1

Мне нужно создать программу yahtzee с помощью java.Упрощение очень длинных операторов if

В этой программе я должен сравнивать граничные значения каждый раз, когда кости скатываются. У меня есть ArrayList из 5 кубиков.

Есть ли способ сравнить эти штампы без очень длинных утверждений?

Операторы if должны были бы сравнить одно значение кости с другим 4, а затем сделать это для остальных 4 также умереть. Это будет очень долго, и я уверен, что его можно упростить, но я не знаю, как это сделать. Любая помощь приветствуется с этой проблемой. Это кости класса

public class Die 
{ 
    private final int MAX = 6; // maximum face value 

    private int faceValue; // current value showing on the die 

    //----------------------------------------------------------------- 
    // Constructor: Sets the initial face value. 
    //----------------------------------------------------------------- 
    public Die() 
    { 
     faceValue = 1; 
    } 

    //----------------------------------------------------------------- 
    // Rolls the die and returns the result. 
    //----------------------------------------------------------------- 
    public int roll() 
    { 
     faceValue = (int)(Math.random() * MAX) + 1; 

     return faceValue; 
    } 

    //----------------------------------------------------------------- 
    // Face value mutator. 
    //----------------------------------------------------------------- 
    public void setFaceValue(int value) 
    { 
     faceValue = value; 
    } 

    //----------------------------------------------------------------- 
    // Face value accessor. 
    //----------------------------------------------------------------- 
    public int getVal() 
    { 
     return faceValue; 
    } 

    //----------------------------------------------------------------- 
    // Returns a string representation of this die. 
    //----------------------------------------------------------------- 
    public String toString() 
    { 
     String result = Integer.toString(faceValue); 

     return result; 
    } 
} 

Я установил свой код Java, чтобы включить Collections.sort

import java.util.*; 

public class Yahtzee 
{ 
    public static void manin(String args[]) 
    { 

     Die die1 = new Die(); 
     Die die2 = new Die(); 
     Die die3 = new Die(); 
     Die die4 = new Die(); 
     Die die5 = new Die(); 

     Die placeholder = new Die(); 

     int timeRolled = 0; 


     String myString; 

     Scanner scan = new Scanner(System.in); 

     System.out.println("Please press 'y' to play and 'n' to quit"); 

     myString = scan.next(); 

     if(myString == "y") 
     { 
      ArrayList<Integer> yahtzee = new ArrayList<>(5); 

      die1.roll(); 
      die2.roll(); 
      die3.roll(); 
      die4.roll(); 
      die5.roll(); 

      yahtzee.add(die1.getVal()); 
      yahtzee.add(die2.getVal()); 
      yahtzee.add(die3.getVal()); 
      yahtzee.add(die4.getVal()); 
      yahtzee.add(die5.getVal()); 

      Collections.sort(yahtzee); 





     } 






    } 
} 

Как бы я знать, сравнить эти значения друг с другом?

+0

Описывать очень долго, если заявление вы имеете в виду. Некоторые из них будут довольно сложными, но, может быть, ваши могут быть улучшены. – zapl

+4

Ну, это 'if (myString ==" y ")' не очень длинный, но очень неправильный: P ... [Как сравнить строки в Java?] (Http://stackoverflow.com/q/513832) – Tom

+0

Это утверждение для контроля над игрой. – Todd

ответ

1

Если вы имеете дело с цифрами, почему бы не использовать int[] вместо целых ArrayList?

int[] yahtzee = new int[5]; 
yahtzee[0] = (die1.roll()); 
yahtzee[1] = (die2.roll()); 
yahtzee[2] = (die3.roll()); 
yahtzee[3] = (die4.roll()); 
yahtzee[4] = (die5.roll()); 
Arrays.sort(yahtzee); 

Это упорядочит ваш массив в порядке возрастания. Первый элемент = наименьший, последний = самый большой.

Вам не придется вручную использовать какие-либо инструкции if, а код более оптимизирован и более чист.

EDIT:

И как указано в комментариях, а if(myString == "y") вы должны использовать if(myString.equals("y")

+1

Я не могу .add для массива. Только список массивов. – Todd

+0

Я использую граничные значения 5 штампов. Могу ли я установить 5 значений лица для объектов, а затем использовать их с массивами .sort? – Todd

+1

Или просто используйте 'Collections.sort()' в 'List'. Кроме того, хотя сортировка - неплохая идея, даже если значения отсортированы, как вы ожидаете проверить разные руки без условных утверждений? – azurefrog

Смежные вопросы