我尝试将项目添加到米数组。每个项目都从Meter.load(sc)返回,并返回一个仪表。当我尝试打印项目以检查输出时,
第一个测试正确打印了所有项目,但是第二个测试失败,仅显示重复的最后一个项目。由于这个问题,我不能从其他类调用getMeterNumbers

谁能帮我这个?谢谢。

public class CommercialAccount extends Account {

private Meter[] meters;

public CommercialAccount(AccountNumber accountNumber, Meter[] meters) {
    this.accountNumber = accountNumber;
    this.meters = meters;
}

public CommercialAccount(Scanner sc, AccountNumber accountNumber) {
    this.accountNumber = accountNumber;
    int n = sc.nextInt();
    sc.nextLine();
    meters = new Meter[n];
    for (int i = 0; i < n; i++) {
        meters[i] = Meter.load(sc);
        System.out.println("Test 1: " + meters[i].toString());
    }
    for (int i = 0; i < meters.length; i++) {
        System.out.println("Test 2: " + meters[i].toString());
    }
}

public String toString() {
    return accountNumber.toString() + " C " + meters.length;
}

public MeterNumber[] getMeterNumbers() {
    MeterNumber[] ms = new MeterNumber[meters.length];
    for (int i = 0; i < meters.length; i++) {
        ms[i] = meters[i].getMeterNumber();
    }
    return ms;
}
}


控制台打印

Test 1: 356 926 850
Test 1: 101 949 516
Test 1: 911 221 326
Test 1: 241 329 198
Test 1: 569 096 301
Test 1: 629 316 190
Test 1: 537 224 159
Test 2: 537 224 159
Test 2: 537 224 159
Test 2: 537 224 159
Test 2: 537 224 159
Test 2: 537 224 159
Test 2: 537 224 159
Test 2: 537 224 159


更新:
 发现我的错误,这是我的Meter类中的所有属性都是静态的,因此这就是原因。谢谢大家

最佳答案

您的问题有两种可能的原因:


Meter.load(sc)始终返回相同的Meter实例。这将解释为什么数组中的所有元素都相同。
Meter类中的所有属性都是静态的,因此所有实例共享相同的值。


编辑:基于OP的注释,问题在于将Meter类中的属性定义为静态。

关于java - 字符串数组添加重复项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26508137/

10-11 04:04