2

この Java プログラムを実行すると、他のメソッドである quaffle と snitch が整数のみを返すため、出力は最初の println のみになると予想されます。ただし、このプログラムの出力には、quaffle および snitch メソッドの println も含まれています。後者のメソッドは返されないため、println は役に立たないと思います。どうしたの?

出力:

スニッチ: x = 4004, y = 1001
クワッフル: x = 2003, y = 1, z = 1001
ブラッジャー: x = 1001, y = 2001, z = 2003

プログラム:

import acm.program.*; 
public class Hogwarts extends ConsoleProgram { 
 public void run() { 
  bludger(2001); 
 } 

 private void bludger(int y) { 
  int x = y / 1000; 
  int z = (x + y); 
  x = quaffle(z, y); 
  println("bludger: x = " + x + ", y = " + y + ", z = " + z); 
 } 

 private int quaffle(int x, int y) { 
  int z = snitch(x + y, y); 
  y /= z; 
  println("quaffle: x = " + x + ", y = " + y + ", z = " + z); 
  return z; 
 } 

 private int snitch(int x, int y) { 
  y = x / (x % 10); 
  println("snitch: x = " + x + ", y = " + y); 
  return y; 
 } 
} 
4

4 に答える 4

3

returnステートメントの意味について誤解していると思います。

'return'は、指定された値を関数が呼び出された場所に返します。この関数は、他の操作を自由に実行したり、端末に出力したり、ファイルを作成および削除したり、その他のことを実行したりできます。これらのアクションは、関数から「戻されない」という事実によって「取り消される」ことはありません。

これは、関数の副作用と呼ばれます。

于 2012-07-20T03:09:44.940 に答える
3

println、呼び出されると出力行を書き込みます。返される値に対して何もする必要はありません。3 回呼び出すためprintln、3 行の出力が得られます。

于 2012-07-20T03:07:03.600 に答える
0

println()返品とは何の関係もありません。がprintln()呼び出されると、一度に出力に書き込み、次にreturnが呼び出されます。そのため、関数が返された場合でも、println()が実行されています。

于 2012-07-20T03:22:10.940 に答える
0

いいえ、printlnここでは返されません。

このprintlnは、次の実行フローのために実行されます。

call bludger
 -> call quaffle
    -> call snitch
       -> print "snitch" // snitch is printed first
    -> print "quaffle"   // later quaffle
 -> print "bludger"      // and now bludger
于 2012-07-20T03:20:21.707 に答える