递归 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