我是一名Java初学者,我正在尝试编写一个可以按随机顺序创建名称链接环的代码,所以这是我到目前为止获得的代码。

而且我认为问题出在assassinGame class中,但是我认为它应该返回node,以便可以在第二类中使用。但我真的不知道如何将这个名字放入节点。
   **,第二类要求我为每两个名称打印最后一个,这意味着列表是否为1,2,3,4,5。所以应该打印出我所想的2,3,4,5。

**第一个类是构造函数,它们都不是main方法。

private Node start;

private static class Node {
    public int val;
    public Node next;

    public Node(int v, Node n) {
            val = v;
            next = n;
    }
}

public AssassinGame(String[] names) {
    Random name = new Random();
    int num = name.nextInt(10)+1;

    String[] peoples = {"Bob","Jill","Tom","Brandon","Stontaigh",
                        "Loofautt","Grennoogh","Jshjnt","Zjlouv",
                        "Fabeih","Aishof","Hoir"};
    List<String> nam = Arrays.asList(peoples);
    Collections.shuffle(nam);
    int index = new Random().nextInt(nam.size());
    String anynames = nam.get(index);
    System.out.println("Your random name is" + anynames + "now!");
    return nam;
}

public void print() {
    while(nam.next!=null) { System.out.println(nam.next); }
}

最佳答案

print方法有一些问题:


它应该带有一个参数,即要打印的列表/节点。目前,它不需要参数,因此无法访问nam变量。
您的while循环正在检查nam.next是否不为null(很好),但是您没有在循环内更改nam。如果一开始是对的,那么它将永远是对的,您将得到一个无限循环。您可能想在其中添加一行nam = nam.next
我认为对于每个nam实例,您可能希望打印nam.val。这肯定可以避免当前的错误,因为该错误不会打印列表的第一个元素。


除此之外,由于将节点定义为仅包含ArrayList<String>,因此将Node转换为int时会遇到问题。通过定义如下,可以使用泛型使节点拥有任何类型(这正是Java内置集合的工作方式):

private static class Node<T>
{
    public T val;
    public Node next;

    public Node(T v, Node n)
    {
        val = v;
        next = n;
    }
}


只需在类名之后声明一个<T>参数,并用int替换T的声明。

最后,您需要一种将标准Java集合转换为Node类之一的方法。您是否知道可以执行此操作的算法?尽管我很乐意为您提供编码方面的帮助,但我不想为您解决这方面的问题。

07-24 21:23