2

9までの値があると言う循環リンクリストの数字を削除する方法を作成する必要があります

1 2 3 4 5 6 7 8 9

そして、通過する4番目の整数ごとに継続的に削除したい場合、次のようになります

5 6 7 8 9 1 2 3; //  4 is removed
9 1 2 3 5 6 7;   //  8 is removed
5 6 7 9 1 2;     //  3 is removed
1 2 5 6 7;       //  9 is removed
7 1 2 5;         //  6 is removed
7 1 2;           // 5 is removed
1 2;             // 7 is removed
1;               // 2 is removed

要素を通過する移動と、要素を削除する削除を作成する必要がありますが、それは自分で行うことができます。toString(); に問題があります。メソッド、私は現在値を返していません。

class Digit{ 

    class DigitNode
    {
            public int num=0;           // Digit's position in line
            public DigitNode next=null; // Reference to next digit
            /**
            * Digit constructor, initializes number
            */
            public DigitNode(int number)
            {
                   //
                num = number;
                next = null;
            }
    }

    private int number;
    private DightNode current = null;   // Linked list of digits
    private DigitNode tail = null;  // Tracks end of list as it is constructed

    /**
     * constructs a circular linked list of
     * @param n DigitNodes, current is the first DigitNode and tail is the last DigitNode(next of tail is current)
     */

    public Digit(int n)
    {
        //
        number = n;
        current = null;
        tail = null;
     }

     /*
     * prints all Digits starting from current until tail
     */
     @Override
     public String toString()
     {
    //
         String strVal = "";
         DigitNode position = current;
         while (position != null) {
             strVal = strVal + position + " ";
             position = current.next;
         }
         return strVal;
     }

私には、現在の値として position を割り当てていることを理解し1ています。次に、 position を次の値であると呼び、 after になるまで続行します。したがって、する必要があります。しかし、残念ながら何も返されません。デバッグを試み、マーカーをいくつか配置して、何かを返すかどうかを確認しましたが、そうではありませんでした。nullstrVal[1]" "[2]null9strVal1 2 3 4 5 6 7 8 9System.out.prinln();

4

2 に答える 2

1

まず、のオブジェクトDigitを埋める必要があります。DigitNodeあなたが投稿したスナップショットからそれを行うコードが表示されません。
おそらく、のコンストラクターでこれを行うDigitか、メソッドDigit.add( DigitNodenode) を作成できます。これが必要です。そうしないと、current常に null になります。


次に、先ほどコメントで述べたように toString を追加する必要があります。または、 .toString() を次のようにDigitNode変更することもできます。Digit

strVal = strVal + position.num + " "; // note position.num to get the number
于 2013-11-20T08:43:53.083 に答える
0

DigitNode に toString() がないため、呼び出すときに

strVal = strVal + position + " ";

デフォルトのtoString()メソッドが位置用であるものが何であれ、strValに追加するだけです。これはDigitNodeです。これは、'+' を使用してオブジェクトを String に追加すると、toString() を呼び出して、String に追加するもの (この場合は strVal) を取得するためです。

于 2013-11-20T08:37:34.450 に答える