为什么传递一个返回变量但也有println的参数也会传递println?

时间:2012-07-20 03:04:32

标签: java parameters

当运行这个java程序时,我希望输出只是第一个println,因为其他方法,quaffle和snitch只返回整数。但是,该程序的输出还包括quaffle和snitch方法的println。我希望println在后一种方法中没用,因为它们没有返回。发生了什么?

输出:

告密:x = 4004,y = 1001
quaffle:x = 2003,y = 1,z = 1001
bludger: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 个答案:

答案 0 :(得分:3)

println在调用时写入一行输出。您无需对其返回的值执行任何操作。由于您调用了println三次,因此您将获得三行输出。

答案 1 :(得分:3)

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

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

这称为side-effect of a function

答案 2 :(得分:0)

不,这里不会返回println

执行此println以执行以下操作。

call bludger
 -> call quaffle
    -> call snitch
       -> print "snitch" // snitch is printed first
    -> print "quaffle"   // later quaffle
 -> print "bludger"      // and now bludger

答案 3 :(得分:0)

println()与回归无关。调用println()时,它立即写入输出,然后调用return。因此,即使返回该函数,也已执行println()