如何在java中设置数字名称

问题描述:

我试图设计一个游戏,玩Hi/Lo纸牌游戏,直到用户在连续获得4个正确的答案,尽管theres与代码的问题..我不知道如何一旦用户指出“较高”,“较低”或“相等”是他们将最后'cardGenerated'数字与之比较的数字,那么弹出卡号。如何在java中设置数字名称

现在,它将它与用户不知道或未知的数字进行比较,因此他们不知道他们是对还是错。我知道我可以只添加“nextCard”可变进showOptionDialog输出虽然我宁愿只是有一个号码被输出,所以如果程序打印:

"The Card pulled is the 9 
Is the next card Higher, Lower or Equal?" 

输出的下一个号/卡号是多少用户正在比较以前的数字(9)和。

此外,

我已经设置了常量,但我不知道如何使它所以不是打印11,12,13,1,它打印JACK,后,王,ACE,和什么不。

import java.util.Random; 
import javax.swing.JOptionPane; 

public class HiLo { 

public static final int JACK = 11; 
public static final int QUEEN = 12; 
public static final int KING = 13; 
public static final int ACE = 1; 

    public static void main(String[] args) { 

     int correctGuesses = 0; 

     Random generator = new Random(); 
     int currentCard; 
     int nextCard = generator.nextInt(KING+1); 

     while (correctGuesses < 4) 
     {   
      currentCard = nextCard; 
      nextCard = generator.nextInt(KING+1); 

      Object[] options = {"Higher", 
       "Lower", 
       "Equal"}; 
      int Input = JOptionPane.showOptionDialog(null, 
       "The Card pulled is the " + currentCard + 
       " \nis the next card Higher, Lower or Equal?", 
       "HiLo Card Game", 
      JOptionPane.YES_NO_CANCEL_OPTION, 
      JOptionPane.QUESTION_MESSAGE, 
      null, options, options[0]); 

      if (nextCard > currentCard && Input == JOptionPane.YES_OPTION) 
      { 
       correctGuesses++; 
      } 
      else if (nextCard > currentCard && Input == JOptionPane.NO_OPTION) 
      { 
       correctGuesses = 0; 
      } 

      else if (nextCard > currentCard && Input == JOptionPane.CANCEL_OPTION) 
      { 
       correctGuesses = 0; 
      } 

      else if (nextCard < currentCard && Input == JOptionPane.YES_OPTION) 
      { 
       correctGuesses = 0; 
      } 

      else if (nextCard < currentCard && Input == JOptionPane.NO_OPTION) 
      { 
       correctGuesses++; 
      } 

      else if (nextCard < currentCard && Input == JOptionPane.CANCEL_OPTION) 
      { 
       correctGuesses = 0; 
      } 

      else if (nextCard == currentCard && Input == JOptionPane.YES_OPTION) 
      { 
       correctGuesses = 0; 
      } 

      else if (nextCard == currentCard && Input == JOptionPane.NO_OPTION) 
      { 
       correctGuesses = 0; 
      } 

      else if (nextCard == currentCard && Input == JOptionPane.CANCEL_OPTION) 
      { 
       correctGuesses++; 
      }  
     } 

     JOptionPane.showMessageDialog(null, "Congratulations, You guessed correctly 4 times" 
       + "\nthe Last Card was the " + nextCard + " resart to play again"); 
    } 

} 
+1

http://*.com/help/how-to-ask – 2014-11-02 22:30:36

+0

有写'0'比'correctGuesses更简单的方法 - correctGuesses' – Deltharis 2014-11-02 22:37:35

+0

我知道,它只是我想到的第一个数学方法,我知道我可以让它纠正错误= 0;但我没有改变它,因为它不是我目前最大的问题之一 – roughosing 2014-11-02 22:39:50

如果你想变量不包含单个循环迭代中(和你的问题希望你能在两次迭代使用nextCard值),你不要在循环中声明它。每次迭代您也不需要新的生成器或选项对象。

Random generator = new Random(); 
int currentCard; 
int nextCard = generator.nextInt(KING+1); 
while (correctGuesses < 4) 
{ 
    currentCard = nextCard; 
    nextCard = generator.nextInt(KING+1); 
    ... 
} 

至于卡印刷 - 你或许应该创建一个卡枚举,一个包含需要打印的护理相关信息(值,套件)以及被覆盖的toString方法。写作应该很简单。

+0

谢谢男人,认为这是类似的东西,虽然我试图在循环内做到这一点我的问题:P – roughosing 2014-11-02 22:37:51

+0

@GregPenrose永远不要将问题的核心改为完全不同的东西,特别是在获得答案之后!事实上,我解决您的主要问题的正确答案似乎无关紧要。 *有一个单一问题的单一问题策略。 – Deltharis 2014-11-02 23:29:59

+0

哦对不起,我应该现在删除问题还是恢复更改? – roughosing 2014-11-02 23:32:10

嵌套,如果是凌乱。你应该简化,以免你一遍又一遍地重新评估同样的事情。例如,你的前三层评估nextCard > cardGenerated。如果您将其提取到自己的if,代码将更具可读性。你也可以用switch()代替评价(Input == JOptionPane.XX_OPTION)的另一部分:

 if(nextCard > cardGenerated) 
     { 
      switch(input) 
      { 
       case JOptionPane.YES_OPTION: 
        correctGuesses++; 
        break; 
       case JOptionPane.NO_OPTION: 
       case JOptionPane.CANCEL_OPTION: 
        correctGuesses = 0; 
        break; 
       default: 
        System.out.println("Should never happen, but default case should always be included"); 
      } 
     } 
     else if(nextCard < cardGenerated) 
     { 
      switch(input) 
      { 
       case JOptionPane.NO_OPTION: 
        correctGuesses++; 
        break; 
       case JOptionPane.YES_OPTION: 
       case JOptionPane.CANCEL_OPTION: 
        correctGuesses = 0; 
        break; 
       default: 
        System.out.println("Should never happen, but default case should always be included"); 
      } 
     } 
     else 
     { 
      switch(input) 
      { 
       case JOptionPane.CANCEL_OPTION: 
        correctGuesses++; 
        break; 
       case JOptionPane.YES_OPTION: 
       case JOptionPane.NO_OPTION: 
        correctGuesses = 0; 
        break; 
       default: 
        System.out.println("Should never happen, but default case should always be included"); 
      } 
     } 
+0

好的建议,但我知道它也是如此很大的评论,这不是一个答案 – Deltharis 2014-11-02 23:35:06