1

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

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

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

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); }
}
4

1 回答 1

1

print方法有几个问题:

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

除此之外,您将在将您的转换ArrayList<String>为 a时遇到问题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>参数,并用intwith替换声明T是所有需要的。

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

于 2013-05-29T07:32:45.803 回答