如何在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");
}
}
如果你想变量不包含单个循环迭代中(和你的问题希望你能在两次迭代使用nextCard值),你不要在循环中声明它。每次迭代您也不需要新的生成器或选项对象。
Random generator = new Random();
int currentCard;
int nextCard = generator.nextInt(KING+1);
while (correctGuesses < 4)
{
currentCard = nextCard;
nextCard = generator.nextInt(KING+1);
...
}
至于卡印刷 - 你或许应该创建一个卡枚举,一个包含需要打印的护理相关信息(值,套件)以及被覆盖的toString方法。写作应该很简单。
谢谢男人,认为这是类似的东西,虽然我试图在循环内做到这一点我的问题:P – roughosing 2014-11-02 22:37:51
@GregPenrose永远不要将问题的核心改为完全不同的东西,特别是在获得答案之后!事实上,我解决您的主要问题的正确答案似乎无关紧要。 StackOverflow有一个单一问题的单一问题策略。 – Deltharis 2014-11-02 23:29:59
哦对不起,我应该现在删除问题还是恢复更改? – 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");
}
}
好的建议,但我知道它也是如此很大的评论,这不是一个答案 – Deltharis 2014-11-02 23:35:06
http://stackoverflow.com/help/how-to-ask – 2014-11-02 22:30:36
有写'0'比'correctGuesses更简单的方法 - correctGuesses' – Deltharis 2014-11-02 22:37:35
我知道,它只是我想到的第一个数学方法,我知道我可以让它纠正错误= 0;但我没有改变它,因为它不是我目前最大的问题之一 – roughosing 2014-11-02 22:39:50