我是一名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类之一的方法。您是否知道可以执行此操作的算法?尽管我很乐意为您提供编码方面的帮助,但我不想为您解决这方面的问题。