我有一个课程作业,我们必须制作一个骰子游戏,但使用多种方法。我的问题是,我无法理解为什么我的方法之一?
{
int d1 = rollDie(1,6);
int d2 = rollDie(1,6);
int d3 = rollDie(1,6);
boolean triple = isTriple(d1, d2, d3);
boolean pair = isPair(d1, d2, d3);
boolean straight = isStraight(d1, d2, d3);
boolean junker = isNone(d1, d2, d3);
if (triple == True ){
System.out.println("You got a Triple!");
printDice(d1, d2, d3);
wins = wins + 1;
}
else if (pair == True ){
System.out.println("You got a Pair!");
printDice(d1, d2, d3);
ties = ties + 1;
}
else if (straight == True ){
System.out.println("You got a Straight!");
printDice(d1, d2, d3);
wins = wins + 1;
}
else if (junker == True ){
System.out.println("Try Again!");
printDice(d1, d2, d3);
loses = loses + 1;
我的屏幕看起来像这样 如图所示,我只获得三倍,但我也应该得到对,直和junker。:
welcome to eDice
-----------------
Rules
First you will roll your dice.
Then you'll get a result.
Triple and straigth = win.
Pair = tie.
Anything else = loses.
Let's Play y/n: y
You got a Triple!
Dice 1 = 2 Dice 2 = 5 Dice 3 = 6
Let's Play y/n: y
You got a Triple!
Dice 1 = 5 Dice 2 = 1 Dice 3 = 6
Let's Play y/n: y
You got a Triple!
Dice 1 = 6 Dice 2 = 2 Dice 3 = 6
Let's Play y/n: y
You got a Triple!
Dice 1 = 6 Dice 2 = 3 Dice 3 = 1
Let's Play y/n: y
You got a Triple!
Dice 1 = 3 Dice 2 = 2 Dice 3 = 4
Let's Play y/n: n
Why not you scared?
Do you want to play again y/n: n
Goodbye!
Wins 5
Ties 0
Loses: 0
这是我的rollDie方法:
public static int rollDie(int min, int max){
int dice = (int)(Math.random() * 6) + 1;
return dice;
我的Triple,Pair,Straight和None方法:
public static boolean isTriple(int d1, int d2, int d3){
if (d1 == d2 && d2 == d3){
}
return True;}
public static boolean isStraight(int d1, int d2, int d3){
if (d2 == d1 + 1 && d3 == d2 + 1 || d1 == d2 + 1 && d2 == d3 + 1){
}
return True;}
public static boolean isPair(int d1, int d2, int d3){
if (d1 == d2 || d2 == d3 || d1 == d3){
}
return True;}
public static boolean isNone(int d1, int d2, int d3){
if (!(isTriple(d1, d2, d3)|| isStraight(d1, d2, d3)|| isPair(d1, d2, d3))){
}
return True;}
答案 0 :(得分:0)
无论如何,我们无法看到的isTriple
函数似乎总是会返回true
您给出的任何值。
然后你循环通过它,我假设。而它总是会停止三倍 你说你需要使用不同的功能,我理解但在这种情况下它有点奇怪但是oke。
在我看来,这是一个更好的代码。你没有重用那些被称为pair的语句,而是继续使用那些语句,因此在这种情况下将它们放入变量是没有用的。你也检查了它是否真实,但If语句已经为你做了。
int d1 = rollDie(1,6);
int d2 = rollDie(1,6);
int d3 = rollDie(1,6);
if (isTriple(d1, d2, d3)){
System.out.println("You got a Triple!");
printDice(d1, d2, d3);
wins = wins + 1;
}
else if (isPair(d1, d2, d3)){
System.out.println("You got a Pair!");
printDice(d1, d2, d3);
ties = ties + 1;
}
else if (isStraight(d1, d2, d3)){
System.out.println("You got a Straight!");
printDice(d1, d2, d3);
wins = wins + 1;
}
else if (isNone(d1, d2, d3)){
System.out.println("Try Again!");
printDice(d1, d2, d3);
loses = loses + 1;
(发表评论得分低,所以我这样做了)
答案 1 :(得分:0)
在你的方法中你检查条件,但是你永远不会返回false,所以首先检查(isTriple)总是如此,以这种方式改变:
public static boolean isTriple(int d1, int d2, int d3){
if (d1 == d2 && d2 == d3){
return true;
}
return false;
}
public static boolean isStraight(int d1, int d2, int d3){
if (d2 == d1 + 1 && d3 == d2 + 1 || d1 == d2 + 1 && d2 == d3 + 1){
return true;
}
return false;
}
public static boolean isPair(int d1, int d2, int d3){
if (d1 == d2 || d2 == d3 || d1 == d3){
return true;
}
return false;
}
public static boolean isNone(int d1, int d2, int d3){
if (!(isTriple(d1, d2, d3)|| isStraight(d1, d2, d3)|| isPair(d1, d2, d3))){
return true;
}
return false;
}
注意:
true
和false
代替True
或False
。
int d1 = rollDie(1,6);
int d2 = rollDie(1,6);
int d3 = rollDie(1,6);
if (isStraight(d1, d2, d3)){
System.out.println("You got a Straight!");
printDice(d1, d2, d3);
wins = wins + 1;
}
else if (isTriple(d1, d2, d3)){
System.out.println("You got a Triple!");
printDice(d1, d2, d3);
wins = wins + 1;
}
else if (isPair(d1, d2, d3)){
System.out.println("You got a Pair!");
printDice(d1, d2, d3);
ties = ties + 1;
}
else if (isNone(d1, d2, d3)){
System.out.println("Try Again!");
printDice(d1, d2, d3);
loses = loses + 1;
}
感谢它现在有效,但你能解释一下原因吗?
当然,让我们看看。
你有这个方法:
public static boolean isTriple(int d1, int d2, int d3){
if (d1 == d2 && d2 == d3){
}
return True;
}
这里发生了什么?你在if (d1 == d2 && d2 == d3)
进行了正确的检查,如果骰子有效,那么条件将为true
,代码将通过身体(行)在{
和}
之间,但没有任何结果,因为if
语句的正文为空,请在此处查看:
public static boolean isTriple(int d1, int d2, int d3){
if (d1 == d2 && d2 == d3) { // starts body
// OOOOPS!!! EMPTY BODY
} // ends body
return True; // this line is ALWAYS EXECUTED
}
我如何解决它?,只需在方法中添加2个流程,如果if条件为真,则为1,否则为另一个。
public static boolean isTriple(int d1, int d2, int d3){
if (d1 == d2 && d2 == d3){
return true; // if condition is true return true
}
return false;
}
请记住,如果您的代码流找到return
语句,方法中的其余代码将被忽略!!!
如果我向您展示相应的内容,我认为这个方法可以更清楚:
public static boolean isTriple(int d1, int d2, int d3){
if (d1 == d2 && d2 == d3){
return true; // if condition is true return true
} else {
return false; // if condition is false return false
}
}
这是风格问题,我的一位老师完全反对每种方法中的多个返回语句,所以他曾经这样做:
public static boolean isTriple(int d1, int d2, int d3){
boolean isTriple = false;
if (d1 == d2 && d2 == d3){
isTriple = true;
}
return isTriple;
}
或者你可以使用oneliner,并不总是推荐,但在这种情况下更美观:
public static boolean isTriple(int d1, int d2, int d3){
return d1 == d2 && d2 == d3;
}