骰子程序总计一个骰子的面和第二个骰子不能正常工作

问题描述 投票:2回答:2

我正在尝试创建一个滚动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);


        }    

}

这应该滚动die1并给我die1的面值,然后它应该给我die2的值,然后它应该总计两个骰子的数量。

java constructor dice
2个回答
0
投票

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

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

只需从局部变量中删除'static'关键字即可。

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);

    }

}

祝你有美好的一天..


0
投票

你应该每roll只调用一次Die

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

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

然后使用面值

sum = (die1.getFaceValue())+(die2.getFaceValue()) ;
© www.soinside.com 2019 - 2024. All rights reserved.