【问题标题】:Recursive id generation returning wrong value, though generates correct one?递归 id 生成返回错误值,但生成正确的值?
【发布时间】: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",即使它在递归时得到了正确的值?

【问题讨论】:

    标签: java recursion sequence


    【解决方案1】:

    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
    

    【讨论】:

    • 我什至没有想过将结果分配为循环的结果。谢谢,它确实有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-29
    • 2018-11-07
    • 2023-03-18
    • 2015-03-24
    • 2020-11-04
    • 2020-04-29
    • 2016-06-02
    相关资源
    最近更新 更多