【问题标题】:How to return an array as a list of Nodes如何将数组作为节点列表返回
【发布时间】:2017-03-16 09:23:21
【问题描述】:

所以我正在编写这段代码,其中用户将一个 int 数组 x 输入到方法 xify(x) 中。然后应该返回每个元素的数量。所以,如果x 是数组[4, 2, 3],我们应该返回有头列表:4 4 4 4 2 2 3 3 3

但是,我的方法似乎只返回一个空列表。我似乎无法追踪问题所在。下面我提供了我的 xify() 方法,以及一个名为 add 的辅助方法,它将节点添加到列表中。

public static Node<Integer> xify(int[] x){
    Node<Integer> result = new Node<>(null, null);
    int counter=0;
    int length=x.length;
    while(counter<length){ //loop through the array
        while(x[counter]!=0){ //take each element, add it to the list * int of the elem
        add(result,x[counter]);
        x[counter]=x[counter]-1;}
        counter++;
    }
    return result;
}

辅助方法:

 public static<T> void add(Node<T> list, T element){
     while(list.getNext()!=null){
         list=list.getNext();
     }
     list.setNext(new Node<>(element, null));
 }

我的算法有什么问题?

P.S 您可能已经看到,它使用的是泛型,因为这是我目前正在学习的。

我怎么称呼它:

System.out.println(xify(array));
System.out.println(toString(xify(array)));

【问题讨论】:

  • 我希望你的问题是 add(result,x[counter]); 因为 java 不是 pass-by-referenced 所以如果你在 add 函数中添加元素它不会影响你的 result 变量。
  • @pooyan 是的,它会的。 result 将被变异
  • @pooyan 是的,我的朋友,add 功能工作正常,我已经在使用它,它完成了它应该做的事情。我只需要关于我假设的 xify 算法的帮助
  • @MSK 但你说你的问题是`看来我的方法只返回一个空列表`而不是算法。
  • 显示调用xify的代码。我怀疑您有一个用于结果的字段,但您没有分配调用返回的内容,因此它保持为空。

标签: java generics nodes


【解决方案1】:

在您的主代码中,您两次调用您的方法,但您的方法是破坏性

x[counter]=x[counter]-1;

调用后,您的数组包含全零。所以第二次调用将(正确地)产生一个空列表。

最简单的“修复”就是调用一次:

Node<Integer> result = xify(array);
System.out.println(result);
System.out.println(toString(result)); // not sure what this does anyway?

更好的解决办法是不要破坏你传入的内容。如果你在现实生活中破坏这样的数据,其他开发人员会追捕你并把你烧死(形象地说,当然......)。

【讨论】:

  • 天啊!你知道了:D 坏消息是算法似乎仍然关闭......请查看产生的输出......image.prntscr.com/image/7b81868898324a0dacfd2dcc97b33d16.png
  • @MSK 这是一个不同的问题。请提出一个新问题(尽可能缩小代码和问题范围)。
  • 请不要将 java 代码发布为可运行的 sn-p:该功能仅适用于 javascript。
猜你喜欢
  • 2017-01-23
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 2022-01-23
  • 2020-12-29
  • 2013-01-09
  • 1970-01-01
  • 2019-07-15
相关资源
最近更新 更多