-1

私は Head First Java を読んでいて、演習で少し混乱しています。演習の元の指示は関係ありませんが、ポイントは、コードをコンパイルして実行するだけで、答えを吐き出すだけで解決できることです。私はかなり混乱しており、デバッガーを再生して、コードの各行を段階的に進めて、何が起こっているかを確認しようとしています。コードを理解していることを確認するために、コードにコメントを追加しました。たとえば、特定の時点でのカウントなどを理解するのに役立つ必要があります。これが元のコードで、自分で1行追加したものです。私が最もよく理解していないいくつかの行に注意します。

**更新: だから私は自分のコードを最もよく理解していました。特定の行についての質問はコメントにあります。誰かが何が起こるかについて段階的なアプローチを行うことができれば、それはより理解しやすくなるでしょう. 事前にご協力いただきありがとうございます。私は StackOverFlow を初めて使用するので、これが正しい質問方法であったことを願っています。

public class Mix4
{
    int counter = 0;    //This is setting the variable counter to 0.

    public static void main (String[] args)
    {
        int count = 0;    //This is setting the variable count to 0.

        Mix4[] m4a = new Mix4[20];//This is initializing an array of 20 m4a objects to  null.

        int x = 0;        //This is setting the variable x to 0;

        while ( x < 9 )
        {
            m4a[x] = new Mix4(); //This actually creates the m4a object at array index 0.

            m4a[x].counter = m4a[x].counter + 1;
            //This line is very confusing. How can you use a dot operator on a variable?
            //I am saying variable because as stated above there is a int counter = 0;

            count = count + 1; //This increments the variable count. Why do this though?

            count = count + m4a[x].maybeNew(x);

            //The count variable again is being implemented but this time it calls the
            // maybeNew method and it is passing a 0 as as the argument? Why do this?

            x = x + 1; // x is being incremented. 

            System.out.println(count + " " + m4a[1].counter); 
            //What is this printing and when does this print?
        }

    public int maybeNew(int index)
    {
        if (index < 5)
        {
            Mix4 m4 = new Mix4(); //Creating a new object called m4.

            m4.counter = m4.counter + 1;
            //Same question about this from the code of line stated above using dot
            //operators on variables.

            return 1; //Where does 1 be returned to? I thought you can only have one
                      //return statement per method?
        }
        return 0; // I thought only 1 return statement? I have no idea what these return
                  // statements are doing
    }

    }
}
4

4 に答える 4

0

上記のコードは、次の 2 つの理由でコンパイルされません。

  1. System.out.printlnwhile ループの中にあります。これにより、コンパイラがm4a[1].counterm4a[1] オブジェクトに到達したときに NullPointerException が発生します。オブジェクトは作成されていません。m4a[0] のみが作成されています。または、この行をそのままにして、次のように変更することもできますm4a[0].counter
  2. maybeNew(int index)内部にメソッド宣言がありmainます。これはほとんどの場合、中かっこの間違いである可能性がありますが、別のメソッド内でメソッドを宣言できないことを知っているだけです。mainはメソッドであるため、その外側で宣言する必要がありますmaybeNewが、内側から呼び出す必要がありますmain

     public class Mix4 {
     int counter = 0;
     public static void main (String[] args) {
     int count = 0;
     Mix4[] m4a = new Mix4[20];
     int x = 0;
    
     while (x < 9) {
        m4a[x] = new Mix4();
        m4a[x].counter = m4a[x].counter + 1;
        count = count + 1;
        count = count + m4a[x].maybeNew(x);
        x = x + 1;
       // System.out.println(count + " " + m4a[0].counter);
    }
     System.out.println(count + " " + m4a[1].counter);
    }
        public int maybeNew(int index)
    {
     if (index < 5)
    {
        Mix4 m4 = new Mix4();
        m4.counter = m4.counter + 1;
        return 1;
    }
     return 0;
    }
    }
    
于 2015-01-26T12:32:09.757 に答える