好奇是否有办法跳过方法的代码而只获取返回值。现在,此示例代码将运行两次调用y.output
,而我只需要将choices()
值作为参数发送到return
方法。
我知道我不必用Input.validate(...)
方法严格保留所有有效选择,但将它们组合在一起似乎更加清晰。
choices()
public class Display
{
public static String[] choices()
{
System.out.println("Choices:");
System.out.println("A. foo");
System.out.println("B. bar");
String[] validChoices = {"A", "B"};
return validChoices;
}
}
主要是效率问题,而不是为我想要显示的每个唯一选择组创建一个新的import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
String input;
Display.choices(); //Called to output valid choices
input = in.nextLine();
Input.validate(input, Display.choices());
//Sends "input" to be compared with all the values in "validChoices" array
//returned by "choices()" method but also duplicates output
}
}
方法,然后验证输入。
同样好奇的是,在保持代码更简洁高效方面,可能还有其他类型的解决方法。
答案 0 :(得分:1)
如果没有方法的帮助,您不能跳过方法的打印和其他副作用。例如,您可以传递一些内容以指示不应执行任何输出:
public static String[] choices(boolean performOutput) {
if (performOutput) {
System.out.println("Choices:");
System.out.println("A. foo");
System.out.println("B. bar");
}
String[] validChoices = {"A", "B"};
return validChoices;
}
现在,您可以调用Display.choices(true)
来生成输出,Display.choices(false)
不生成输出。
但是,在您的情况下没有必要:当每次运行时方法返回相同的内容时,您可以调用它,存储其输出,并使用该点上的存储输出:
String choices = Display.choices(); //Called to output valid choices
input = in.nextLine();
Input.validate(input, choices);
答案 1 :(得分:1)
如果我理解正确,你想要一种方法做两件事:
System.out.println()
来电System.out.println()
来电实现此目的的一种方法是为方法提供boolean
参数作为标志:
public static String[] choices(boolean returnArrayOnly) {
if (!returnArrayOnly) {
System.out.println("Choices:");
System.out.println("A. foo");
System.out.println("B. bar");
}
return new [] {"A", "B"};//cut down from String[] validChoices = {"A", "B"};
}