Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何处理长if语句来读取具有许多公共部分的输入?_Java_Refactoring - Fatal编程技术网

Java 如何处理长if语句来读取具有许多公共部分的输入?

Java 如何处理长if语句来读取具有许多公共部分的输入?,java,refactoring,Java,Refactoring,我正在编写一个简单的Java程序,它可以与用户进行大量交互(通过命令行) 考虑到执行每个可能的操作都有一个唯一的代码。但是,每个操作都需要进一步的输入。问题是许多不同的操作都需要类似的输入。因此,我最终得出如下结论: int input = scanner.nextInt(); String commonInputA, commonInputB, commonInputC, commonInputD; if (input == 1) { //receive required input

我正在编写一个简单的Java程序,它可以与用户进行大量交互(通过命令行)

考虑到执行每个可能的操作都有一个唯一的代码。但是,每个操作都需要进一步的输入。问题是许多不同的操作都需要类似的输入。因此,我最终得出如下结论:

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;
    }
}