java - 为什么节点被添加到错误的链表中?
问题描述
我的部分代码存在问题,我想将索引 0 处具有空字符串的行与不具有空字符串的行分开。虽然只需要行的索引和元素 1 的整数或元素 1 和 0 之间的差异。我决定使用两个链表来拆分每种类型的行,但我得到了一个奇怪的结果。不知何故,一行被添加到错误的链表中。
void Splitter () {
String[][] databaseSchedule = {
{"", "100", "129 East Fremont St, Las Vegas, NV 89101"},
{"", "50", "770 N Las Vegas Blvd, Las Vegas, NV 89101"},
{"", "300", "1610 E Tropicana Ave, Las Vegas, NV 89119"},
{"1300", "1400", "755 E Flamingo Rd, Las Vegas, NV 89119"},
{"", "200", "4650 Aspen Ave Mt Charleston, NV 89124"},
};
int[] subArray = new int[2];
List<int[]> anyTimeStart = new LinkedList<>();
List<int[]> strictTimeStart = new LinkedList<>();
try {
for (int i = 0; i < databaseSchedule.length; ++i) {
if ("".equals(databaseSchedule[i][0])) {
subArray[0] = i;
subArray[1] = Integer.parseInt(databaseSchedule[i][1]);
anyTimeStart.add(subArray);
}
else {
subArray[0] = i;
subArray[1] = Integer.parseInt(databaseSchedule[i][1]) -
Integer.parseInt(databaseSchedule[i][0]);
strictTimeStart.add(subArray);
System.out.println(Arrays.toString(strictTimeStart.get(0)));
//Prints out [3, 100] which is expected.
}
}
System.out.println(Arrays.toString(strictTimeStart.get(0)));
//Prints out [4, 200], what happened?
} catch (NumberFormatException ex) {
System.out.println("String cannot be converted to integer");
}
}
解决方案
您只有一个数组实例:
int[] subArray = new int[2];
您将其添加到两个列表中。调用list.add(subArray)
不会将副本添加subArray
到列表中。subArray
它添加对变量引用的同一数组的引用。因此,您的两个列表最终都包含对同一数组的多个引用。
在添加到列表之前创建一个新数组。例如:
for (int i = 0; i < databaseSchedule.length; ++i) {
subArray = new int[2];
if ("".equals(databaseSchedule[i][0])) {
subArray[0] = i;
subArray[1] = Integer.parseInt(databaseSchedule[i][1]);
anyTimeDuration.add(subArray);
} else {
subArray[0] = i;
subArray[1] = Integer.parseInt(databaseSchedule[i][1]) -
Integer.parseInt(databaseSchedule[i][0]);
strictTimeDuration.add(subArray);
System.out.println(Arrays.toString(strictTimeDuration.get(0)));
}
}
推荐阅读
- ios - Scrollview 在 xcode 11 中使用约束具有不明确的可滚动内容
- graphql - 使用 github API v4 graphQL 获取提交更改的文件和补丁
- docker - Heroku 和 Docker 使用 heroku.yml 部署:如何从“web”更改图像名称?
- biztalk - 如何从 BizTalk 2016 向微软消息队列发送小消息?
- java - 如何在android中像苹果形状一样定制形状进度条?
- sylius - 如何为新的自定义操作类型克隆添加 Flash 消息
- c++ - 从 windows 7 到 windows 10 的同步代码。现在有行尾错误
- deployment - java.lang.NoClassDefFoundError: org/omg/CORBA/TRANSIENT -- WildFly 17
- jenkins - 如何在参数化的 Jenkins 管道项目中检索作业名称
- vb.net - VB.NET LINQ Query 构建属性字符串