Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 字符串数组添加重复项_Java_Arrays - Fatal编程技术网

Java 字符串数组添加重复项

Java 字符串数组添加重复项,java,arrays,Java,Arrays,我尝试将项目添加到米数组中。每个项目都从Meter.load(sc)返回,后者返回一个米。当我试图打印项目以检查输出时, 第一个测试正确地打印出所有项目,但第二个测试失败,只显示最后一个重复的项目。由于这个问题,我无法从其他类调用getMeterNumber 有人能帮我吗?多谢各位 public class CommercialAccount extends Account { private Meter[] meters; public CommercialAccount(AccountN

我尝试将项目添加到米数组中。每个项目都从
Meter.load(sc)
返回,后者返回一个米。当我试图打印项目以检查输出时, 第一个测试正确地打印出所有项目,但第二个测试失败,只显示最后一个重复的项目。由于这个问题,我无法从其他类调用
getMeterNumber

有人能帮我吗?多谢各位

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;
}
}
更新:
发现我的错误,我的Meter类中的所有属性都是静态的,这就是原因。谢谢大家。

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

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

  • 编辑:根据OP的评论,问题是将Meter类中的属性定义为static。

    问题可能有两个原因:

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

  • 编辑:根据OP的评论,问题在于将Meter类中的属性定义为static。

    让我们举一个简单的例子。如果您这样做:

    int n = 5;
    Foo[] foo = new Foo[n];
    for (int i = 0; i < n; i++)
    {
        foo[i] = getFoo("test" + i);
        System.out.println("Test 1: " + foo[i].toString());
    }
    
    for (int i = 0; i < foo.length; i++)
    {
        System.out.println("Test 2: " + foo[i].toString());
    }
    
    private Foo getFoo(String s)
    {
        Foo f = new Foo();
        f.s = s;
        return f;
    }
    
    private class Foo
    {
        public String s;
    
        public String toString()
        {
            return s;
        }
    }
    
    但在这种情况下(它必须是你的):

    int n=5;
    Foo[]Foo=新的Foo[n];
    对于(int i=0;i
    它不工作,第一个循环很好,因为数组是空的,每个元素只是设置了最后一个值。第二个循环失败,因为数组已满,每个元素都引用同一个对象


    =>修改您的
    load
    方法以返回不同的实例。

    让我们举一个简单的例子。如果您这样做:

    int n = 5;
    Foo[] foo = new Foo[n];
    for (int i = 0; i < n; i++)
    {
        foo[i] = getFoo("test" + i);
        System.out.println("Test 1: " + foo[i].toString());
    }
    
    for (int i = 0; i < foo.length; i++)
    {
        System.out.println("Test 2: " + foo[i].toString());
    }
    
    private Foo getFoo(String s)
    {
        Foo f = new Foo();
        f.s = s;
        return f;
    }
    
    private class Foo
    {
        public String s;
    
        public String toString()
        {
            return s;
        }
    }
    
    Test 1: test0
    Test 1: test1
    Test 1: test2
    Test 1: test3
    Test 1: test4
    Test 2: test0
    Test 2: test1
    Test 2: test2
    Test 2: test3
    Test 2: test4
    
    但在这种情况下(它必须是你的):

    int n=5;
    Foo[]Foo=新的Foo[n];
    对于(int i=0;i
    它不工作,第一个循环很好,因为数组是空的,每个元素只是设置了最后一个值。第二个循环失败,因为数组已满,每个元素都引用同一个对象


    =>修改您的
    load
    方法以返回不同的实例。

    如果是这样,那么
    的“Test 1”
    语句是否也打印相同的?+1。我的错误是你的第二个选择。我的Meter类中的所有属性都是静态的,所以这就是原因。谢谢。@Mena不,每次调用
    Meter后都会打印“test1”。load(sc)
    会更改实例的属性,因此您可以看到单个实例在不同时间点的状态(或类在不同时间点的静态属性状态)。如果是这样,
    的“test1”不是这样吗
    语句也打印相同?+1。我的错误是你的第二个选择。我的Meter类中的所有属性都是静态的,所以这就是原因。谢谢。@Mena不,每次调用
    Meter.load(sc)
    都会打印“test1”。load(sc)
    更改实例的属性,因此您可以看到单个实例在不同时间点的状态(或类在不同时间点的静态属性状态)。这是一个很好的解释,但正如OP所写,这不是问题所在。问题是Meter类中的静态成员。这是一个很好的解释,但正如OP所写的,这不是问题所在。问题是Meter类中的静态成员。
    Test 1: test0
    Test 1: test1
    Test 1: test2
    Test 1: test3
    Test 1: test4
    Test 2: test0
    Test 2: test1
    Test 2: test2
    Test 2: test3
    Test 2: test4