2

运行这个 java 程序时,我希望输出只是第一个 println,因为其他方法,quaffle 和 snitch 只返回整数。但是,该程序的输出还包括 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

println调用时写入一行输出。你不需要对它返回的值做任何事情。由于您调用println了 3 次,因此您将获得三行输出。

于 2012-07-20T03:07:03.600 回答
3

我认为您对 return 语句的含义有误解。

'return' 将指定的值返回到调用函数的位置。该函数可以自由地执行任何其他操作,将内容打印到终端,创建和删除文件或执行任何其他操作 - 这些操作不会因为它们没有从函数“返回”而“撤消”。

这称为函数的副作用

于 2012-07-20T03:09:44.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 回答
0

println()与回报无关。当println()被调用时,它立即写入输出,然后调用 return。所以即使函数被返回,println()也已经被执行了。

于 2012-07-20T03:22:10.940 回答