Java 如何处理长if语句来读取具有许多公共部分的输入?
我正在编写一个简单的Java程序,它可以与用户进行大量交互(通过命令行) 考虑到执行每个可能的操作都有一个唯一的代码。但是,每个操作都需要进一步的输入。问题是许多不同的操作都需要类似的输入。因此,我最终得出如下结论:Java 如何处理长if语句来读取具有许多公共部分的输入?,java,refactoring,Java,Refactoring,我正在编写一个简单的Java程序,它可以与用户进行大量交互(通过命令行) 考虑到执行每个可能的操作都有一个唯一的代码。但是,每个操作都需要进一步的输入。问题是许多不同的操作都需要类似的输入。因此,我最终得出如下结论: int input = scanner.nextInt(); String commonInputA, commonInputB, commonInputC, commonInputD; if (input == 1) { //receive required input
int input = scanner.nextInt();
String commonInputA, commonInputB, commonInputC, commonInputD;
if (input == 1) {
//receive required input for action 1
commonInputA = scanner.next();
commonInputB = scanner.next();
} else if (input == 2) {
//receive required input for action 2
commonInputB = scanner.next();
commonInputD = scanner.next();
} else if (input == 3) {
//receive required input for action 3
commonInputA = scanner.next();
commonInputC = scanner.next();
} else if (input == 4) {
//receive required input for action 4
commonInputA = scanner.next();
commonInputB = scanner.next();
commonInputC = scanner.next();
commonInputD = scanner.next();
} else if (input == 5) {
//no extra input required to perform action 5
}
当然,这些公共输入被用作初始化对象的构造函数参数。有没有办法以更干净的方式写入上述输入接收器?您可以尝试以下方法
int input = scanner.nextInt();
String commonInputA, commonInputB, commonInputC, commonInputD;
if(input!=2)
commonInputA = scanner.next();
if(input!=3)
commonInputB = scanner.next();
if(input!=1&&input!=2)
commonInputC = scanner.next();
if (input == 1) {
//perform input 1 action
}
else if (input == 2) {
commonInputD = scanner.next();
} else if (input == 3) {
//perform input 3 action
} else if (input == 4) {
commonInputD = scanner.next();
}
接受公共输入的方法之一
import java.util.Arrays;
import java.util.Scanner;
public class SimpleClass {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[][] map = {{0, 1}, {1, 3}, {0, 2}, {0, 1, 2, 3}, {}};
int input = scanner.nextInt();
String[] commonInput = readCommonInput(input, map, scanner);
System.out.println(Arrays.toString(commonInput));
//Calling your constructor
//commonInputA is stored at commonInput[0]
//commonInputB is stored at commonInput[1]
//commonInputC is stored at commonInput[2]
//commonInputD is stored at commonInput[3]
//CommonInputProcessor p = new CommonInputProcessor(commonInput[0], commonInput[1], commonInput[2], commonInput[3]);
}
public static String[] readCommonInput(int input, int[][] map, Scanner scanner)
{
String[] commonInput = new String[4];
for(int i : map[input - 1])
{
commonInput[i] = scanner.next();
}
return commonInput;
}
}