我刚开始学习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;
}
}
}
答案 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]
的结果创建案例陈述是一种非常糟糕的做事方式。
这是非常难以理解和低效的。
由于您依赖于Arrays.toString()
实施,因此无法维护。
注意:我并不完全明白您要做的是什么,因此请将以下示例作为解决问题的另一种方式,而不是替代您的代码:
话虽如此,更好的方法是循环遍历数组,并在for循环中满足条件。
示例:
Arrays.toString()
修改强>:
另一种方法是使用正则表达式。