Java对象类引用相同的双数组,而不是它们自己的双数组

Java对象类引用相同的双数组,而不是它们自己的双数组,java,arrays,Java,Arrays,我从一个文件中读取,该文件首先包含一个字符串,每行大约10行包含50个不同的双精度值。我在向类读取和存储信息方面没有问题。我创建了一个类来保存一些字符串单词,并创建了一个双[]权重来保存50个值。然后,我创建了一个包含10个单词对象类型的数组来保存这10行,我遇到的问题是它们都引用了相同的数组,但是单词被正确保存 例如,该文件如下所示 文件: 或-1.433 0.384 2.6587------总共50个双值 第一个-3.576 1.1511 3.000----------共50个双值 有10行

我从一个文件中读取,该文件首先包含一个字符串,每行大约10行包含50个不同的双精度值。我在向类读取和存储信息方面没有问题。我创建了一个类来保存一些
字符串单词
,并创建了一个
双[]权重
来保存50个值。然后,我创建了一个包含10个单词对象类型的数组来保存这10行,我遇到的问题是它们都引用了相同的数组,但是单词被正确保存

例如,该文件如下所示 文件:

或-1.433 0.384 2.6587------总共50个双值

第一个-3.576 1.1511 3.000----------共50个双值

有10行是这样的

我的程序保存正确的字/字符串,但所有的双数组都保存相同的值

主要代码是:

/* Instance Variables */
File file;
Scanner scan;
Word[] vertexes = new Word[11]; // 1 based indexing

public void readFile() {
    String tempWord;
    double tempnum;
    double[] tempVec = new double[50];

    for (int i = 1; i <= 10; i ++) {
        tempWord = scan.next();

        for (int j = 0; j < 50; j ++) {
            tempnum = scan.nextDouble();

            tempVec[j] = tempnum;

        }

        this.vertexes[i] = new Word(tempWord, tempVec);

    }

}
输出示例:

0.52822-1.355 7 0.16098 0.0 0 0.7 7 7 7 7 0.0 0 0 0.782 2-1.355 7 7 0.16098 0.7 7 7 7 7 7 0.0 0 0 0.7 7 7 7 7 7 7 7 7 7 7 7 0.7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 0.0 0 0 0 0 0 0 0 0.7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 940.69956 0.14885 0.0294531.4888 0.52361 0.099354 1.2515 0.099381-0.079261-0.30862 0.30893 0.11023

1.357 7 0.16098 0.0 0 0 0.29297 7 7 7 7 7 7 0 0 0 0 0.522 2 2-1.355 7 7 7 7 0.16098 0.7 7 7 7 7 0 0 0 0 0.399 9 9 9 9 9 9 9 9 9 9 0 0 0 0 0.7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0.7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.7 7 7 7 7 7 7 7 7 7 7 7 7 7 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 940.69956 0.14885 0.0294531.4888 0.52361 0.099354 1.2515 0.099381-0.079261-0.30862 0.30893 0.11023

何时应该:

0.75874-0.447 7 7 7 7 7 7 7 7 7-0 0 0 0 0 0 0 0 0 0.7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 0 0 0.7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 0 0 0 0 0 0 0 0 0 0 0 0 0.7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.267 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 3024-0.343220.020339 0.2142 0.044097 0.14003-0.20079 0.074794-0.36076 0.43382-0.084617 0.1214

1.357 7 0.16098 0.0 0 0 0.29297 7 7 7 7 7 7 0 0 0 0 0.522 2 2-1.355 7 7 7 7 0.16098 0.7 7 7 7 7 0 0 0 0 0.399 9 9 9 9 9 9 9 9 9 9 0 0 0 0 0.7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0.7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.7 7 7 7 7 7 7 7 7 7 7 7 7 7 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 940.69956 0.14885 0.0294531.4888 0.52361 0.099354 1.2515 0.099381-0.079261-0.30862 0.30893 0.11023


因此它得到了正确的单词,但用从文件中读取的最后50个值覆盖了所有10个的double[]数组。我不确定我做错了什么。

对于内部循环的每个
I
迭代,您都将覆盖
tempVec
数组:

   for (int i = 1; i <= 10; i ++) {
        tempWord = scan.next();

        for (int j = 0; j < 50; j ++) {
            tempnum = scan.nextDouble();
            tempVec[j] = tempnum; // <-- overriding the same positions.
        }
        this.vertexes[i] = new Word(tempWord, tempVec);
    }

请参阅链接问题中已接受的答案,特别是关于“添加相同对象”的段落。非常感谢,伙计,只需在正确的位置添加一行就可以解决问题。
   for (int i = 1; i <= 10; i ++) {
        tempWord = scan.next();

        for (int j = 0; j < 50; j ++) {
            tempnum = scan.nextDouble();
            tempVec[j] = tempnum; // <-- overriding the same positions.
        }
        this.vertexes[i] = new Word(tempWord, tempVec);
    }
    for (int i = 1; i <= 10; i ++) {
        tempWord = scan.next();
        double[] tempVec = new double[50]; // <-- create a new array per word
        for (int j = 0; j < 50; j ++) {
            tempnum = scan.nextDouble();
            tempVec[j] = tempnum;
        }
        this.vertexes[i] = new Word(tempWord, tempVec);
    }