【发布时间】:2019-08-04 21:57:25
【问题描述】:
我正在创建一个程序,它将自定义对象存储到 LinkedList 中以供参考,然后有第二个 LinkedList 包含多个对象,每个对象都有自己的唯一编号 ID。我的问题是,如果 "Test 0"、"Test 1" 和 "Test 4" 在此列表中,并且我尝试添加另一个返回 "Test" 的对象,它返回错误的值(应该是 "Test 2",又名下一个增量值)。每次有匹配项时,我都尝试使用递归搜索整个列表,以确保没有重复项,但仍然返回错误的值。
LinkedList size() 方法可能是错误的,因为我使用的是自定义链表,但为了显示代码,直接说LinkedList 更容易。我的自定义列表中的size() 是其中存储多少对象的正确方法。
以String 类型的LinkedList 显示,我的代码如下:
public static void main(String[] args)
{
String test = "Test";
int n = 0;
LinkedList<String> testList = new LinkedList<String>();
testList.add("Test 0");
testList.add("Test 1");
testList.add("Test 4");
System.out.printf("Original List:%n");
for(int i = 0; i < testList.size(); i++)
{
System.out.printf("%s%n", testList.get(i));
}
System.out.printf("%n%n");
System.out.printf("%s%n", level(n, testList));
testList.add(level(n, testList));
System.out.printf("%s%n", level(n, testList));
testList.add(level(n, testList));
System.out.printf("New List:%n");
for(int i = 0; i < testList.size(); i++)
{
System.out.printf("%s%n", testList.get(i));
}
System.out.printf("%n%n");
}
public static String level(int n, LinkedList<String> list)
{
String test = "Test" + " " + Integer.toString(n);
System.out.printf("Iteration: %d%nGenerated String: %s%n%n", n, test);
for(int i = 0; i < list.size(); i++)
{
if(test.equals(list.get(i)))
{
n++;
level(n, list);
}
}
return test;
}
奇怪的是,通过递归方法生成的字符串是正确的。它只是没有返回正确的值。输出是
Original List:
Test 0
Test 1
Test 4
Iteration: 0
Generated String: Test 0
Iteration: 1
Generated String: Test 1
Iteration: 2
Generated String: Test 2
Iteration: 0
Generated String: Test 0
Iteration: 1
Generated String: Test 1
Iteration: 2
Generated String: Test 2
出于某种原因,即使它在第一次运行时生成"Test 2",它也会返回"Test 0"。
修改后的列表(添加“水平”数字时)是:
New List:
Test 0
Test 1
Test 4
Test 0
Test 0
它应该在第一级返回"Test 2",然后在第二级,它应该返回"Test 3"。输出应如下所示:
New List:
Test 0
Test 1
Test 4
Test 2
Test 3
应该是不管下一个递增数字在哪里,都加一个正确的(即2和4不合适,但还是应该在末尾加3)。
为什么它返回值"Test 0",即使它在递归时得到了正确的值?
【问题讨论】: