Java对象类引用相同的双数组,而不是它们自己的双数组
我从一个文件中读取,该文件首先包含一个字符串,每行大约10行包含50个不同的双精度值。我在向类读取和存储信息方面没有问题。我创建了一个类来保存一些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行
字符串单词
,并创建了一个双[]权重
来保存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);
}