【问题标题】:Finding a proper tricky Dice constructor找到一个合适的棘手 Dice 构造函数
【发布时间】:2018-11-02 19:29:42
【问题描述】:

我正在尝试创建一个代表 Dice 的类,有时 Dice 会被欺骗,即得到一方的概率比其他方最多,所以要获得构造函数,我得到这个:

//sides and color are defined as integers
//sum as a double
public Dice(double[] probability) {
    probability = new double[6];
    sides = 6;
    color = 0; //not relevant
    lastFace = 1;
    for(int i = 0; i < 6; i++){
        sum += probability[i];
    }
    if(sum >= 0.9 && sum <= 1)
        setTricky(probability); //method defined to set a boolean
    else{
        System.out.println("Sorry, but your probability is not valid.");
        trciky = false;
    }
}

所以,在 main 方法中,我有这样的东西:

Scanner sc = new Scanner(System.in);
double[] prob = new double[6];
System.out.println("Type the values of probability for each side of your Dice (it must to be 6).");
for (int i = 0; i < prob.length; i++){
      prob[i] = sc.nextDouble();
}
Dice d2 = new Dice(prob);

当我为数组的值键入双精度值时(例如 {0.1, 0.1, 0.1, 0.5, 0.1 0.1}),它显示 sum 不在排名中。那么,我该怎么办?

【问题讨论】:

  • 在你的构造函数中使用probability = new double[6];,你用一个新的空数组的引用覆盖对传入数组的引用(意思是:新的双数组中的所有值都是0.0)。删除此行,您的问题就解决了
  • 由于这个原因,您没有使用传递的参数:probability = new double[6]; 删除它

标签: java arrays recursion


【解决方案1】:

正如已经指出的那样,这条线

probability = new double[6];

在您的构造函数中覆盖了传入的参数。这是因为您正在将包含概率的数组中的变量名称“概率”分配给一个新的双精度数组。

只要去掉那条线就可以解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-11
    • 2016-03-24
    • 2018-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多