【问题标题】:Retrieving Only a Return value from a method that contains System.out.print从包含 System.out.print 的方法中仅检索返回值
【发布时间】:2018-10-29 12:41:08
【问题描述】:

如果该方法中还有 System.out.print,我如何仅从该方法中检索返回值。在下面的代码中,我将获得返回值,但每次调用该方法时,它也会执行 System.out.print

public static void main(String[] args) {
    String name = pickAName("bob", "ed", "dan");
    System.out.printf(name);
}

public String pickAName (String...names){            
    System.out.printf("Randomly picking from %d names. %n",names.length);
    Random random = new Random();

    return names[random.nextInt(names.length)];
}

【问题讨论】:

  • System.out 与返回值无关。如果要返回打印的内容,请执行此操作。如果您不想打印某些内容,请删除该代码。
  • 将 printf 放入 if 条件中。
  • 不要每次都创建Random - 重复使用一个实例。
  • 最简单的答案?将程序的输出通过管道传输到/dev/null
  • 您到底想要做什么? “如果该方法中还有一个 System.out.print”始终为真,则该方法调用始终在您的方法中。

标签: java arrays random methods


【解决方案1】:

计算机并不聪明——它们只能做你告诉他们做的事情。在您的情况下,它会在每次调用此方法时调用 printf() 并执行它。

如果您在任何情况下确实想要将该调用打印到printf(),那么您可以用if 条件包装它。

如果您永远不需要该输出,则只需完全删除该行。

如果您将调用 printf() 用于调试目的,请尝试习惯使用 IDE 的调试工具 - 从长远来看,这绝对会有所回报。尤其是当您开始编写更复杂的程序时,或者当您使用不是您编写的代码时。

【讨论】:

    【解决方案2】:

    如果您无法控制该方法,那么当您调用 pickAName 方法时,就无法不执行 System.out.printf() 行。通过控制,我的意思是您创建了 pickAName 方法或者可以更改它。

    【讨论】:

    • 没错,但有很多方法可以阻止它向控制台打印任何内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    • 2016-07-07
    • 2016-11-25
    相关资源
    最近更新 更多