【问题标题】:dice program that totals the face of one die and a second die not working correctly一个骰子和第二个骰子的总面数无法正常工作的骰子程序
【发布时间】:2019-04-24 16:43:49
【问题描述】:

我正在尝试创建一个掷 2 个骰子的程序,给出 die1 的数量和 die2 的数量,然后将它们加在一起。我得到了骰子的随机数,但是当它们被加在一起(总和)时,总数不正确。

我曾尝试更改faceValuenumValue,我已将总和更改为die1.getFaceValue + die2.getFaceValue,但总和总是出错。如果有人可以查看代码并查看我是否将其他所有内容放在正确的位置。提前致谢。

package assignment3;

import java.util.*;

public class Die {


    private static final int DEFAULT_NUM_FACES =6;
    private static final int value = 1;
    private static int faceValue;
    private static int numFaces;

    //die(int, int) method- constructor that initialized the instance variables to the parameter values

    public Die(int die1, int die2) {



    }


    //Die(int) method- constructor that initialized the instance variables faceValue to the parameter value and numFaces to 
    //DEFAULT_NUM_FACES
    public Die(int value) {
                faceValue = value;
                numFaces = DEFAULT_NUM_FACES;
                        }
            //die() default constructor that initialized both instance variables to DEFAULT_NUM_FACES
    public Die() {

        this.faceValue=DEFAULT_NUM_FACES;
        this.numFaces=DEFAULT_NUM_FACES;

    }

            //die(die) copy constructor
    public Die(Die otherDie)
    {
         new Die();


    }

            // getFaceValue() - returns the faceValue of the instance
    public int getFaceValue() {


        return faceValue;
    }

            // getNumFaces - return the numFaces of the Die
    public int getNumFaces()
    {
        return numFaces;
    }

            //setFaceValule - sets face values of the die to supplied value
        public int setValue(int faceValue) {
                return faceValue;
            }
            //toString returns a string representation of the face value in the form of (faceValue)
        public String toString()
            {
                String result = Integer.toBinaryString(faceValue);
                return result;

            }

            //Roll - rolls the die to generate a new face value.  The instances face value will be set to this new value.  
            //You can use the random method of the Math class to accomplish this task.  The random method generates a random number between 0 and 1.  
            //by multiplying this number by number of faces, casting the result to an integer and adding one to it.  
            //you will be able to generate a random number between 1 and numFaces
        public int roll()
        {

            faceValue = (int )(Math.random()*numFaces+1);

            return faceValue;

        }
        public static void main(String[] args) {

            Die die1;
            Die die2;
            int sum;

            die1= new Die();
            die1.roll();
            die2= new Die();
            die2.roll();
            sum = (die1.getFaceValue())+(die2.getFaceValue()) ;
            System.out.println("Toss 0 generated a " + die1.getFaceValue()+ " and a " + die2.getFaceValue() +" for a total of " +sum);


        }    

}

这应该掷骰子1并给我骰子1的面值,然后它应该给我骰子2的值,然后它应该合计两个骰子的数量。

【问题讨论】:

  • 每次调用roll() 都会获得一个新值。将值存储在本地,然后添加并显示值。

标签: java constructor dice


【解决方案1】:

我认为你应该有一个实例变量而不是类变量。

基本上,它只是该变量的一个副本,与该类的所有对象(实例)共享。如果该变量发生更改,所有其他类对象都将看到该更改。

只需从局部变量中删除“静态”关键字即可。

public class Die {

    private static final int DEFAULT_NUM_FACES = 6;
    private int faceValue;
    private int numFaces;

    public Die() {

        this.faceValue = DEFAULT_NUM_FACES;
        this.numFaces = DEFAULT_NUM_FACES;

    }

    // getFaceValue() - returns the faceValue of the instance
    public int getFaceValue() {

        return faceValue;
    }

    // getNumFaces - return the numFaces of the Die
    public int getNumFaces() {
        return numFaces;
    }

    // setFaceValule - sets face values of the die to supplied value
    public int setValue(int faceValue) {
        return faceValue;
    }

    // toString returns a string representation of the face value in the form of
    // (faceValue)
    public String toString() {
        String result = Integer.toBinaryString(faceValue);
        return result;

    }

    public int roll() {

        faceValue = (int) (Math.random() * numFaces + 1);

        return faceValue;

    }

    public static void main(String[] args) {

        Die die1;
        Die die2;
        int sum;

        die1 = new Die();
        die1.roll();
        die2 = new Die();
        die2.roll();
        sum = (die1.getFaceValue()) + (die2.getFaceValue());
        System.out.println("Toss 0 generated a " + die1.getFaceValue() + " and a " + die2.getFaceValue()
                + " for a total of " + sum);

    }

}

祝你有美好的一天..

【讨论】:

    【解决方案2】:

    每个Die 只能调用一次roll

    每次调用roll 时,它都会创建一个新的随机数并将其分配给faceValue

    die1= new Die();
    die1.roll();
    die2= new Die();
    die2.roll();
    

    然后使用faceValue

    sum = (die1.getFaceValue())+(die2.getFaceValue()) ;
    

    【讨论】:

    • 还是错了。我只是用那个改变运行它,结果 die1 掷出 5,die2 掷出 6,总共 8。不确定它在哪里出现 8
    • 将此private static int faceValue; 更改为非静态。静态意味着永远只有一个值
    • 取出静态和同样的东西,这就是我得到的:Toss 0 生成一个 2 和一个 5,总共 6 个
    • 这也需要改变你知道System.out.println("Toss 0 generated a " + die1.roll()+ " and a " + die2.roll() +" for a total of " +sum);
    • OK 改变了一切,现在总数是正确的,但现在它一直在滚动双打
    猜你喜欢
    • 2018-04-14
    • 2015-07-03
    • 2018-09-08
    • 2014-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-06
    • 2016-08-10
    相关资源
    最近更新 更多