编辑。问题的字符串比较部分已经解决了,但是当在2个骰子中只滚动一个1时,代码仍然没有进入下一个玩家,只有当两个骰子都是1时才进入下一个玩家。
到目前为止,这是代码,第一个类几乎来自教科书,第二个类使用main方法就是我所做的。
该计划正在尝试创建一个名为 pig 的骰子游戏。如果感兴趣,简单的规则是代码的底部,但主要问题。
我的原因是它没有正常循环,当我没有将y
放入扫描仪再次发出信号时,它就像我输入{{1}一样继续当我不知道的时候。此外,y
语句无法正常工作,因为当玩家使用其中一个骰子滚动if
时,它不会转到下一个玩家。
很抱歉,如果我没有正确解释问题。此外,我不想再使用任何方法或类。我假设有更快的方法来实现这一点,而不是我做的方式,但如果我想在我的代码中使用额外的方法,那么以后的方法。我也有计算积分的问题,因为有时它并没有适当地改变它们,但是一旦其余部分正常工作我就能弄明白。
这是第一段代码。此代码对问题并不重要,但如果您想知道我在1
中调用的方法,您可以查看以下内容:
main
下一段代码是我自己的。我已经更新了代码中的一些内容,现在使用.equals比较字符串时我更改了while条件并简化了if语句。
import java.util.Random;
public class PairOfDice {
private final int MAX = 6;
private int faceValue;
private int faceValue1;
Random generator0 = new Random();
Random generator1 = new Random();
public PairOfDice(){
faceValue = 1;
faceValue1 = 1;
}
public int getFaceValue() {
return faceValue;
}
public void setFaceValue(int faceValue) {
this.faceValue = faceValue;
}
public int getFaceValue1() {
return faceValue1;
}
public void setFaceValue1(int faceValue1) {
this.faceValue1 = faceValue1;
}
public int rollOne() {
faceValue = generator0.nextInt(MAX) + 1;
return faceValue;
}
public int rollTwo() {
faceValue1 = generator1.nextInt(MAX) + 1;
return faceValue1;
}
public int sumOfRoll() {
return faceValue + faceValue1;
}
@Override
public String toString() {
return "First roll of the die: \t" + rollOne()
+ "\nSecond roll of the die: " + rollTwo()
+ "\nThe sum of both rolls: \t" + sumOfRoll();
}
}
答案 0 :(得分:4)
第一件事是第一件事,这是一个重要的概念,当比较字符串时总是使用.equals,而不是==。例如
yesno.toLowerCase() == "y" && signal == 1
应该是
yesno.toLowerCase().equals("y") && signal.equals 1
这是因为y是一个字符串。如果y int y,则使用==。如果您正在比较y并且您不断更改值,那么您将使用=。下一件事;我知道使用getter和setter可能是教科书作业的一部分,但除非是;不要使用它们。
阅读此article。
这使代码很难遵循。你的代码中其他明智的工作,我喜欢你尊重java代码约定!
另外,确保对字符串使用.equals,对于整数使用==。如果你要比较整数,我相信你是int变量,你需要使用==。另外,我认为你可能会对概念感到困惑。如果您有if语句并且正在比较事物并且需要BOTH语句为真,请使用“&&”如果你只需要一个陈述是真的,那就用|| (此键是带有班次的输入上方的键)
答案 1 :(得分:2)
您正在使用==
比较字符串,从而比较引用相等性:
取代
while (yesno.toLowerCase() == "y" && signal == 1) {
与
while (yesno.toLowerCase().equals("y") && signal == 1) {
或
while (yesno.equalsIgnoreCase("y") && signal == 1) {
==
与equals()
:
==
测试引用相等性(即它们是否是相同的对象,即在字符串池中引用相同的字符串)。
但是,.equals()
检查值是否相等(它们的内容是否实际相同)。
但请注意null
字符串。 ==
可以很好地处理这些null
字符串,但是从.equals()
字符串调用null
会导致异常,因为使用null
对象调用该方法。
有关详细信息,请参阅String Pools
替换声明:
while (p1 <= 100 ^ p2 >= 100) {
带
while (p1 <= 100 || p2 >= 100) {
<强>考虑:强>
int p1=1;
int p2=2;
if( p1==1 ^ p2==2){ // False here since it is TRUE^TRUE which is FALSE
System.out.println("Same");
}
if( p1==1 || p2==3){ // TRUE if either one is TRUE
System.out.println("Same Again");
}
仅打印
同样
这是因为^
是按位XOR
运算符,当且仅当两个操作数具有相同的真值时才为false。
将两个else if
替换为等效的
else if ( die2 == 1 || die1 == 1 ) {