1

私はJavaの初心者で、ランダムな順序で名前のリンクされたループを作成できるコードを作成しようとしているので、これは私がこれまでに得たコードです.

問題はにあるとassassinGame class思いますが、2番目のクラスで使用できるようにノードを返す必要があると思います。しかし、この名前をノードに入れる方法が本当にわかりません。** そして 2 番目のクラスでは、リストが 1,2,3,4,5 の場合、2 つの名前ごとに最後の名前を出力するように求められます。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変数にアクセスできません。
  • あなたのループはそれがnullではないwhileことを確認しています(問題ありません)が、ループ内で変更していません。最初に true の場合、それは永遠に true になり、無限ループが発生します。おそらくそこに行を追加したいと思うでしょう。nam.nextnamnam = nam.next
  • のインスタンスごとにnam、おそらく を印刷したいと思いますnam.val。これにより、リストの最初の要素が印刷されないという現在のバグを確実に回避できます。

それとは別に、 .のみを保持するようにノードを定義したため、ArrayList<String>.を. 次のように定義することで、ジェネリックを使用して、ノードに任意の型を保持させることができます (これはまさに Java の組み込みコレクションの仕組みです)。Nodeint

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 クラスの 1 つに変換する方法が必要です。これを可能にするアルゴリズムを知っていますか? コーディングの詳細については喜んでお手伝いしますが、その側面を解決したくはありません...

于 2013-05-29T07:32:45.803 に答える