将数组分配给构造函数

时间:2018-03-11 15:46:01

标签: java arrays constructor

所以我有一个多个骰子的对象,我试图传递一个数组来一次分配所有的骰子

public DiceCollection(int numDice, int[] diceNumSides) {
    this.numDice = numDice;
    this.diceNumSides = diceNumSides;
    Die[] dice = new Die[];
    for (int i = 0; i < numDice; i++){
        dice[i] = new Die(diceNumSides[i]);
    }
}

并且在“Die [] dice = new Die [];中出现了3个错误

  • 缺少数组维度
  • 不兼容的类型:模具无法转换为Die []
  • Local Variable隐藏字段

如果有人感兴趣的话,这是代码的其余部分

import java.util.Scanner;

    public class DiceCollection {
        private int numDice,diceNumSides[];
        Die[] dice;

    public DiceCollection(int numDice, int[] diceNumSides) {
        this.numDice = numDice;
        this.diceNumSides = diceNumSides;
        Die[] dice = new Die[];
        for (int i = 0; i < numDice; i++){
            dice[i] = new Die(diceNumSides[i]);
        }
    }

    public int sumDice(){
        int sumSides = 0;
        for (int i = 0; i < numDice; i++){
            sumSides = sumSides + dice[i];
        }
        return sumSides;
    }    
}

1 个答案:

答案 0 :(得分:0)

  
      
  1. 缺少数组维度
  2.   

数组总是固定长度。您需要在构造时指定它们的大小(并且以后不能再更改它)。你写了

Die[] dice = new Die[];

但你需要写一些像

这样的东西
Die[] dice = new Die[5];

表示有5骰子的数组。在你的情况下可能

Die[] dice = new Die[numDice];

如果需要可变长度,可以使用List类的实现,例如ArrayList(内部使用数组技术)。

List<Die> dice = new ArrayList<>();
  
      
  1. 不兼容的类型:Die无法转换为Die[]
  2.   

此错误是第一个错误的后续行动。指定长度时将修复它。

  
      
  1. Local Variable隐藏字段
  2.   

此警告抱怨您的变量名称等于某些成员变量(字段)的名称,例如

this.diceNumSides = diceNumSides;

这里有一个名为diceNumSides的局部变量和一个名为diceNumSides的字段(同样适用于numDicedice)。这意味着您必须使用this来处理该字段,就像您在代码中正确执行的那样。

但是,这通常是令人讨厌的错误的根源。这就是为什么你得到警告,你可能会选择不同的名称。经常使用的是字段的前导m我的):

mDiceNumSides

在其他语言中,常用的是下划线(_diceNumSides)。