Java中的循环和条件

时间:2015-08-21 03:55:25

标签: java loops if-statement while-loop

编辑。问题的字符串比较部分已经解决了,但是当在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();
    }
}

2 个答案:

答案 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)

  1. 您正在使用==比较字符串,从而比较引用相等性: 取代

    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

  2. 替换声明:

    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。

  3. 将两个else if替换为等效的

    else if ( die2 == 1 || die1 == 1 ) {