递归 id 生成返回错误的值,但生成正确的值?
Recursive id generation returning wrong value, though generates correct one?
我正在创建一个程序,它将自定义对象存储到 LinkedList 中以供参考,然后有第二个 LinkedList,其中包含多个对象,每个对象都有自己唯一的编号 ID。我的问题是,如果 "Test 0"
、"Test 1"
和 "Test 4"
在此列表中并且我尝试添加另一个对象,即 returns "Test"
,它 returns 是错误的值(应该是 "Test 2"
,也就是下一个增量值)。我尝试在每次匹配时使用递归来搜索整个列表以确保没有重复,但仍然 return 是错误的值。
LinkedList size()
方法可能是错误的,因为我使用自定义链表,尽管为了显示代码,直接说 LinkedList
更容易。我的自定义列表中的 size()
是其中存储了多少对象的正确方法。
显示为LinkedList
类型String
,我的代码如下:
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;
}
奇怪的是,通过递归方法生成的字符串是正确的。它只是 return 不是正确的值。输出是
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"
,它 returns "Test 0"
.
修改后的列表(添加 'leveled' 个号码时)为:
New List:
Test 0
Test 1
Test 4
Test 0
Test 0
第一层应该return "Test 2"
,然后第二层应该return "Test 3"
。输出应如下所示:
New List:
Test 0
Test 1
Test 4
Test 2
Test 3
应该是无论下一个递增的数字在哪里,都正确的加上一个(即2和4不对,但应该还是在最后加3)。
为什么它 return 计算值 "Test 0"
,即使它在递归中得到正确的值?
在level
,当你
if(test.equals(list.get(i)))
{
n++;
level(n, list);
}
您正在递归(并丢弃递归的结果)。如果,我将其更改为将递归的结果分配给 test
like
if(test.equals(list.get(i)))
{
n++;
test = level(n, list);
}
然后我得到
New List:
Test 0
Test 1
Test 4
Test 2
Test 3
我正在创建一个程序,它将自定义对象存储到 LinkedList 中以供参考,然后有第二个 LinkedList,其中包含多个对象,每个对象都有自己唯一的编号 ID。我的问题是,如果 "Test 0"
、"Test 1"
和 "Test 4"
在此列表中并且我尝试添加另一个对象,即 returns "Test"
,它 returns 是错误的值(应该是 "Test 2"
,也就是下一个增量值)。我尝试在每次匹配时使用递归来搜索整个列表以确保没有重复,但仍然 return 是错误的值。
LinkedList size()
方法可能是错误的,因为我使用自定义链表,尽管为了显示代码,直接说 LinkedList
更容易。我的自定义列表中的 size()
是其中存储了多少对象的正确方法。
显示为LinkedList
类型String
,我的代码如下:
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;
}
奇怪的是,通过递归方法生成的字符串是正确的。它只是 return 不是正确的值。输出是
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"
,它 returns "Test 0"
.
修改后的列表(添加 'leveled' 个号码时)为:
New List:
Test 0
Test 1
Test 4
Test 0
Test 0
第一层应该return "Test 2"
,然后第二层应该return "Test 3"
。输出应如下所示:
New List:
Test 0
Test 1
Test 4
Test 2
Test 3
应该是无论下一个递增的数字在哪里,都正确的加上一个(即2和4不对,但应该还是在最后加3)。
为什么它 return 计算值 "Test 0"
,即使它在递归中得到正确的值?
在level
,当你
if(test.equals(list.get(i)))
{
n++;
level(n, list);
}
您正在递归(并丢弃递归的结果)。如果,我将其更改为将递归的结果分配给 test
like
if(test.equals(list.get(i)))
{
n++;
test = level(n, list);
}
然后我得到
New List:
Test 0
Test 1
Test 4
Test 2
Test 3