Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在不使用节点的情况下交替合并链表?通过使用递归?_Java_Merge_Linked List - Fatal编程技术网

Java 如何在不使用节点的情况下交替合并链表?通过使用递归?

Java 如何在不使用节点的情况下交替合并链表?通过使用递归?,java,merge,linked-list,Java,Merge,Linked List,没有错误,但仍然不起作用。我不知道怎么了。我们还没有在课堂上讨论节点的概念,所以我很难理解它 它的输出应该是: 骨瘦如柴的爱-小鸟 更快乐-埃德·希兰 总有一天-切尔西·卡特勒 public class HandsOnAct1 { static LinkedList songs = new LinkedList(); static LinkedList artists = new LinkedList(); static LinkedList playlist = new Link

没有错误,但仍然不起作用。我不知道怎么了。我们还没有在课堂上讨论节点的概念,所以我很难理解它

它的输出应该是:

骨瘦如柴的爱-小鸟

更快乐-埃德·希兰

总有一天-切尔西·卡特勒

public class HandsOnAct1 {

  static LinkedList songs = new LinkedList();
  static LinkedList artists = new LinkedList();
  static LinkedList playlist = new LinkedList();
  
  public static void Merge(){
      int element= songs.size();
      int number=0;
      
      System.out.println(element);
      
  if (number !=element){
  playlist.add(number, songs);
  playlist.add(number,artists);
  number++;
  
  }
      System.out.println(playlist);
  }
  

    public static void main(String[] args) {
 
        songs.add("Skinny Love");
        songs.add("Happier");
        songs.add("Sometimes");
        
        artists.add("Birdy");
        artists.add("Ed Sheeran");
        artists.add("Chelsea Cutler");
        
        Merge();    
    }
    
}


这是一个使用递归的例子,我知道这是一个先决条件

static LinkedList<String> songs = new LinkedList<>();
static LinkedList<String> artists = new LinkedList<>();
static LinkedList<String> playlist = new LinkedList<>();

songs.add("Skinny Love");
songs.add("Happier");
songs.add("Sometimes");

artists.add("Birdy");
artists.add("Ed Sheeran");
artists.add("Chelsea Cutler");

int index = 0;
static void merge() {

    // if you want/need checks
    if ( index >= artists.size()){
        return;
    }

    playlist.add(songs.get(index) + " - " + artists.get(index));
    System.out.println(playlist.get(index));
    index++;
    merge();
}

merge();
您自己的代码的主要问题是需要从内部再次调用merge,或者像我所做的那样将索引移到函数外部,或者将其作为参数(如publicstaticvoidmergeint-index)引入。然后从内部调用它,就像mergeindex++


我想这是一个意见问题。如果您愿意,您可以阅读纯函数/非纯函数和命令式/函数式编程,这是两者的区别

欢迎访问SO!你期望什么样的产出?另一方面,将参数传递给合并函数是一种更好的设计,而不是让它在一组固定的全局函数上操作。返回一个结果,让调用方打印,以便该函数可重用。@ggorlen输出应该是:Skinny Love-Birdy Happier-Ed Sheeran某天-Chelsea Cutler好的,我会尝试你的建议。希望我能成功。非常感谢您,您可以编辑您的帖子,使其与控制台上显示的内容一模一样。作为一种评论很难理解。谢谢您的代码似乎希望使用循环来迭代列表,但我没有看到任何循环。另外,在列表中使用泛型也是一个好主意。@ggorlen对于这个活动,我们被要求不要使用循环/迭代,而是使用任何递归方法。这就是为什么我有很多麻烦;-;这很好,但是可以在链表上使用递归来破坏堆栈,因此这是一个值得怀疑的设计选择。当深度不是直线时,递归是最好的。如果必须使用递归,则需要从自身内部调用Merge,这里是真正需要参数的地方。我建议编辑你的帖子,说明你需要使用递归的要求。非常感谢你,现在我明白了@niclaslindgren。你今天救了我的命haha@ZeyZey听到这个消息我很高兴。请考虑将答案标记为已接受。