2013-05-29 34 views
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); } 
} 
+2

你的方法'的print()'我不知道它做什么,但将无法正常工作。另外,如果这是你的主类,你的'AssassinGame'必须是'public static void AssassinGame',并且不应该返回任何东西。 – DaGLiMiOuX

+0

这不是主要方法,这是一个构造函数 –

+0

你知道构造函数是为你的实例化对象赋值而不返回任何东西吗?另外,你说你的目标是,如果你的数组中有'1,2,3,4,5',你想显示'2,3,4,5'。如果它报告了任何错误或者它在控制台中显示的内容,那就太好了,你在这里发布它 – DaGLiMiOuX

回答

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>参数,并更换声明intT是所有需要的。

最后,您需要将标准Java集合转换为您的一个Node类的方法。你知道一个算法,可以让你这样做吗?我不想为你解决这方面,即使我很高兴能帮助编码细节...