2016-10-29 12 views
-2
int number; 
number = 80; 

number = (int)math.sqrt(number++) 
System.out.println(number) 

これは上記のコードです。私はプログラミングの初心者であり、数学の立場に立っています。答えは、私はそれはしかしことを考えると答えに影響を与えることができ++のVARとVAR ++とどのように認識しています9.誰かがこの番号= 80を説明することはできますか? number =(int)math.sqrt(number ++);ナンバー= 8?

ない理由

私はSQRTは私が混乱しています。この場合、しかし8で承知していますPLUSは印刷コードの上にあります。私はなぜ8が1に追加されていないのか混乱しているので、9が印刷されます。

+0

'8.944 ...'は 'int'にキャストされると' 8 'になります。これは 'println()'での実際の印刷とは関係ありません。この値を変数 'number'に保存しています。インクリメントは 'number'に保存されません。 – Gendarme

+0

こんにちは、そのジョー、このコンセプトを理解するのを助けてくれてありがとう。 Regaurds、joe – JAVAJoseph

答えて

1

number++ポストインクリメントで、式が平方根関数内で80に評価されることを意味します。 80の

平方根ので((int)で行わ)その整数変換は、ここで最初の式が評価される8

+1

こんにちは、お返事ありがとうございます。ありがとうジョー – JAVAJoseph

1
number = (int)math.sqrt(number++) , 

は、その後数が増加し、なぜthatsのある厳密9以上です。

あなたは

number = (int)math.sqrt(++number) , 

に変更した場合、それは

+0

こんにちは、お返事ありがとうございました。これは私のUniコースの過去の論文に私を混乱させた答えでした。だから、私は主に、スクリプトを修正するのではなく、なぜ結果を得たのかとだけ心配していました。しかし、あなたの返信joeの多くのおかげで – JAVAJoseph

3

更新++は、代入の右辺のオペランドにnumberになります動作しますバック全体の式の結果を割り当てることによって上書きされますnumber

これはJLS§15.26.1でカバーされています。ここではその代入式で何が起こるかです:

  1. 左側には、代入式の右辺が評価され
  2. 変数であると判断された:
    1. 80を読み取りnumberから
    2. number
    3. math.sqrtが読ん80値と呼ばれている(これは関係ありません)81にインクリメントされBOVE
    4. math.sqrtの結果は、上記#2(8)からint
  3. 結果に変換されnumber

注ステップ2.1の順序と上記2.2に格納されます。これは、接尾辞number++を使用したためです。 ++numberを使用した場合、注文は元に戻されます(結果は異なります)。

右側のnumber++は、その結果に何ら影響を与えない。 (Javaでは、他のランゲージでは、これは未定義の動作とみなされ、コンパイラは必要な処理を実行できます。)

具体的には(9の値を取得すると述べたので)、++は、割り当ての結果がnumberに格納された後に適用されません。 math.sqrtに渡すと、値numberを読み込んだ直後に適用されます。

+0

素晴らしい答え! –

+0

簡単に言えば、副作用は 'i ++'の評価の不可欠な部分です。式の結果を使用するとすぐに、副作用が既に適用されています。 –

+0

こんにちは、ありがとうございました。ありがとう、ジョー – JAVAJoseph

0

javaでは、式が実行された後ではなく、式が評価されるときにポストインクリメントが変数に作用します。変数は81に増分され、以前の値80はsqrtに渡され、最後に8が割り当てられます。

+0

こんにちは、お返事ありがとうございます。ありがとうジョー。 – JAVAJoseph

関連する問題