Java用户输入是switch case中的数组类型

时间:2016-06-22 15:34:32

标签: java

我刚开始学习Java。我希望我的输入(数组)接受x和y值,例如RR ,S

结果出来但问题是如果我输入值R,R,则输出返回default,而不是匹配的case。我想我的扫描仪出了问题 - 我认为它不是a.next()但是我不知道放在那里......

import java.util.Arrays;
import java.util.Scanner;

public class testa {
    public static void main(String[] args) {
        Scanner a = new Scanner (System.in);

        String Rotate;
        String[] Position = new String[]{"R", "S", "RR", "E", "RS"};

        System.out.println("Rotate Equation?");
        Rotate = a.next();

        String[] values = new String[5];

        values[0] = "R";
        values[1] = "S";
        values[2] = "RR";
        values[3] = "RS";
        values[4] = "RRS";

        switch (Arrays.toString(values))
        {
        //cases with "RR" resulted
        case "[R, R]":
        case "[S, RS]":
        case "[RRS,S]":
            System.out.println("RR");
            break;
            //cases with "E" resulted
        case "[R,RR]":
        case "[RR,R]":
        case "[S,S]":   
        case "[RS,RS]":
        case "[RRS,RRS]":
            System.out.println("E");
            break;
            //cases with "RS" resulted
        case "[R,S]":
        case "[RR,RRS]":
        case "[S,RR]":  
        case "[RRS,R]":
            System.out.println("RS");
            break;
            //cases with "RRS" resulted
        case "[R,RS]":
        case "[RR,S]":
        case "[S,R]":   
        case "[RS,RR]":
            System.out.println("RRS");
            break;
            //cases with "S" resulted
        case "[R,RRS]":
        case "[RR,RS]":
        case "[RS,R]":  
        case "[RRS,RR]":
            System.out.println("S");
            break;
            //cases with "R" resulted
        case "[RR,RR]":
        case "[S,RRS]":
        case "[RS,S]":
        case "[RRS,RS]":
            System.out.println("R");
            break;
        case "x:D3":
            System.out.println("x");
            break;
            //other input will be invalid
        default :
            System.out.println("Invalid move");
            break;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

对于这个数组:

brew tap                     # list tapped repositories
brew tap <tapname>           # add tap
brew untap <tapname>         # remove a tap

返回:

String[] values = new String[5];

values[0] = "R";
values[1] = "S";
values[2] = "RR";
values[3] = "RS";
values[4] = "RRS";

将是:

Arrays.toString(values)

哪个与您的任何案例陈述都不匹配。

现在看来,基于[R, S, RR, RS, RRS] 的结果创建案例陈述是一种非常糟糕的做事方式。

  1. 这是非常难以理解和低效的。

  2. 由于您依赖于Arrays.toString()实施,因此无法维护。

  3. 注意:我并不完全明白您要做的是什么,因此请将以下示例作为解决问题的另一种方式,而不是替代您的代码:

    话虽如此,更好的方法是循环遍历数组,并在for循环中满足条件。

    示例:

    Arrays.toString()

    修改

    另一种方法是使用正则表达式。