我是一个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); }
}
答案 0 :(得分:1)
print
方法存在一些问题:
nam
变量。while
循环正在检查nam.next
是否为空(罚款),但您没有在循环中更改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类的方法。您是否知道可以让您这样做的算法?我不想为你解决这个问题,即使我很乐意帮助解决这些问题......