gpt4 book ai didi

java - 为什么我的 ArrayList 的 ArrayList 值在设置后会变回来?

转载 作者:行者123 更新时间:2023-12-02 08:56:18 25 4
gpt4 key购买 nike

关闭。这个问题需要details or clarity .它目前不接受答案。












想改进这个问题?通过 editing this post 添加详细信息并澄清问题.

2年前关闭。




Improve this question




不幸的是,我正在使用 ArrayLists of ArrayLists of ArrayLists 的 ArrayLists。我对 Java 很陌生,所以这对我来说可能是一个简单的错误(我已经习惯了 Perl)。我正在对一些代码进行故障排除,其中我构建了空 ArrayList^4 的完整结构(它代表固定数量的数据字段,这些字段永远不会更改,但具有已修改的值),然后尝试摄取文件,设置使用 ArrayList.get() 和 ArrayList.set() 的嵌套值。这是代码——从文件中读取行(进入 ArrayList 行)并迭代以分段添加到 ArrayList^4(称为 DB)。

读入“行”ArrayList 的输入数据的一般格式大致如下 - 抱歉,这很难看。每个 0 可以是任何字符串:

ID  0.0-0.0 0.0-0.0 0.0-0.0 0.0-0.0 0.0-0.0

DB 是最终的 ArrayList^4,四个嵌套的数组列表都包含一定数量的占位符字符串。它是通过将零的 ArrayLists 顺序添加到 ArrayList^2 来构建的,然后将它们添加到 Arraylist^3,这是添加到 DB 的 Line。输入数据由各种分隔符分解并用于替换这些占位符字符串。
ArrayList<String> Single = new ArrayList<String>();
for(int i = 0; i < 2; i++) {
Single.add("0"); }

ArrayList<ArrayList<String>> Squared = new ArrayList<ArrayList<String>>();
Squared.add(Single);
Squared.add(Single);

ArrayList<ArrayList<ArrayList<String>>> Line = new ArrayList<ArrayList<ArrayList<String>>>();
Line.add(Squared);
//repeat to make 5 items in list

数据的分隔符在技术上是\n、\t、- 和 .以该顺序。

我在一行中使用 j+1 因为输入文件的第一列(总共六列)只是一个标题(因此被添加到 ArrayList“信息”中),因此在其余的数据处理中跳过它。
for (int i = 0; i < linesSize; i ++) {
DB.add(Line); //Line is an ArrayList^3 containing the "empty" values for the given line
List<String> columns = Arrays.asList(lines.get(i).split("\t"));
info.add(columns.get(0));
for (int j = 0; j < 5; j ++) {
List<String> categories = Arrays.asList(columns.get(j+1).split("-"));
int categoriesSize = categories.size();
for (int k = 0; k < categoriesSize; k ++) {
List<String> elements = Arrays.asList(categories.get(k).split(Pattern.quote(".")));
int elementsSize = elements.size();
for (int l = 0; l < elementsSize; l ++) {
String id = elements.get(l);
//System.out.println("before:" + DB.get(i).get(j).get(k).get(l));
DB.get(i).get(j).get(k).set(l, id);
//System.out.println("after:" + DB.get(i).get(j).get(k).get(l) + "\n");
}
}
}
}

我已经包含了故障排除注释行,因为它们告诉我这些值正在被改回。例如,我会看到
Before: 0
After: X

但随后几行:
Before: X
After: 0

除非在我的循环中发生意外的事情,否则数据没有理由变回……我已经盯着它看了一段时间无济于事。我检查了所有的 Size 变量,它们似乎正确地出来了。当我重新组装数据时,输出文件也会正确打印(代码未显示)。我还在单独的先前循环中使用了 DB.add(Line),以防它搞砸了,但没有骰子。

如果我错过了什么,请告诉我!谢谢!我也知道可能有更好的方法可以做到这一点,但这必须奏效;它不必特别高效或优雅。

最佳答案

更伤眼的是对变量使用大写字母:根据所有 Java 样式指南,“Single”、“Square”、“Line”应该是小写的。但这不是你的问题的原因。

您将多次向 DB 对象添加相同的“行”。您应该为每一行创建一个新的 ArrayList(),否则如果您将一个项目添加到行列表,它会为每个索引“i”添加。

'single' 和 'squared' 也一样,你将相同的 'single' Arraylist 添加到 'squared' 中多次,而不是每次都添加一个新的,所以它们也不会不同。

关于java - 为什么我的 ArrayList 的 ArrayList 值在设置后会变回来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60466396/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com