2

私は現在、CSE の入門コースを受講しており、クラスの資料から質問がありました。スライドの 1 つで、教授はこの方法を定義しています。

public int myMethod()
{
  int retval, itemp = 100;
  retval = itemp;
  {
     int retval, itemp = 75; 
     retval = itemp; 
  }
    return retval;
}

教授の話によると、retval は 100 の値を返す/保持しますが、Eclipse/コマンド ラインを開いてメソッドを記述したところ、コンパイルされませんでした。retval が 2 回宣言されているため、プログラムをコンパイルできないと言い続けていました。ここで何がうまくいかなかったのかについてのガイダンスはありますか? また、「retval = item;」のポイントは何ですか。? どちらも同じ値に初期化されているので、その行に目的はありますか?

4

2 に答える 2

1

identifierで同じ2 回変数を宣言できないため、これはコンパイルされませんsame scope

できることは、特定のスコープで既存の変数を再宣言することです。

class MyClass {
  private int myVar = 1;

  public void redeclare() {
    // ...
    int myVar = 2;
    System.out.println(myVar);
    // ...
  }
}

myVar はvisibleスコープ内にあるredeclare()が宣言されていないため、これは機能します!

{}完全に新しいスコープを作成しないため、教師がやりたかったことは失敗します。

さらに:

int retval, itemp = 100;
retval = itemp;

ここでは、最初の行で retvalitempの両方を宣言していますが、itempのみを初期化しているため、retval は初期化されていません。そのため、2 行目で item の値を割り当てています。しかし、これらはプリミティブな値であるため、itemp の値をコピーしてスタックに置くので、2 つの異なる値が得られます。一方を変更しても他方は変更されません。

教授に害はありません。しかし、もし私があなただったら、それらのスライドを捨てて、Java に関する優れた本 (たとえば、Core Java または Thinking in Java) と CS の入門書 (これがこのコースの目標なので?) のような「構造とコンピュータプログラムの解釈」.

于 2013-10-23T01:34:11.187 に答える
1

Eclipse/コマンド ラインでメソッドを記述した場合、コンパイルされません。retval が 2 回宣言されているため、プログラムをコンパイルできないと言い続けていました。

おそらく次のようなコードの方が良いでしょう:

public class Foo {
   int retval, itemp = 100;


   public static void main(String[] args) {
      Foo foo = new Foo();
      System.out.println(foo.myMethod());
   }

   public int myMethod() {
      retval = itemp;
      {
         int retval, itemp = 75;
         retval = itemp;
      }
      return retval;
   }
}

また、「retval = item;」のポイントは何ですか。?

これにより、retVal 変数が値を保持するように設定されます。


どちらも同じ値に初期化されているので、その行に目的はありますか?

いいえ、そうではないです。item は、2 つの場所で異なる値を保持します。

于 2013-10-23T01:26:00.927 に答える