我试图在java中创建一个switch语句,但即使我的语法正确,我也会收到此错误:Syntax error on token "{", SwitchLabels expected after this token
我知道我可以使用语句,但我的老师告诉我使用switch作为& #39;看起来更漂亮,所以我使用开关。我试图移动input=scan.next()
,但这给了我另一个错误
switch (true) {
input = scan.next();
case 1:
input.equals("T");
outToServer.writeBytes("T\r\n");
System.out.println(inFromServer.readLine());
break;
case 2:
input.equals("S");
outToServer.writeBytes("S\r\n");
System.out.println(inFromServer.readLine());
break;
case 3:
input.equals("Z");
outToServer.writeBytes("Z\r\n");
System.out.println(inFromServer.readLine());
break;
case 4:
input.equals("D");
System.out.println("Write a message");
text = scan.next();
outToServer.writeBytes("D " + text + "\r\n");
System.out.println(inFromServer.readLine());
break;
case 5:
input.equals("DW");
outToServer.writeBytes("DW\r\n");
System.out.println(inFromServer.readLine());
break;
case 6:
input.equals("RM20");
text = "RM20 4" + "\"" + text1 + "\" \"" + text2 + "\" \"" + text3 + "\"" + "\r\n";
outToServer.writeBytes(text);
System.out.println(inFromServer.readLine());
System.out.println(inFromServer.readLine());
break;
case 7:
input.equals("Q");
clientSocket.close();
System.out.println("The server is disconnected");
break;
}
答案 0 :(得分:9)
前两行有两个直接问题:
switch(true){
您无法启用boolean
值
input = scan.next();
您已在switch
语句中立即获得此行 - 它必须在case
语句中。
我怀疑你想要:
String input = scan.next();
switch (input) {
case "T":
...
break;
case "S":
...
break;
// Other cases
default:
...
break;
}
如果您不需要其他任何内容,请删除input
变量:
switch (scan.next()) {
(我还强烈建议你重温你的缩进。虽然switch/case
语句可以通过多种方式缩进,但你现在的方法真的很难理解,IMO。)
在原始代码中给出类似的内容:
case 7: input.equals("Q");
...在我看来,你可能不明白switch语句实际上是做什么的。 Stack Overflow不是学习这种语言基础知识的好地方 - 我建议您阅读Java tutorial on switch
或一本好书,或者向老师寻求更多帮助。
答案 1 :(得分:0)
更改订单:
switch(true){
input = scan.next();
要
input = scan.next();
inputNumber = scan.nextInt();
switch(inputNumber){//or from java 7 use input directly but quote your case values.
答案 2 :(得分:0)
switch(true){
`input = scan.next()`;// This is error line.
需要switch语句后。并且您正在接受用户的价值。
答案 3 :(得分:0)
您不能使用布尔参数执行switch语句。
switch(true)
不是有效的陈述。
Java 6中不允许使用字符串切换,但Java 7和Java 8中允许使用字符串切换。
此外,equals方法返回一个布尔值,你没有保存它。
答案 4 :(得分:0)
实际上,你的语法远非正确。
您想先输入值。从Java 7开始,您可以打开一个字符串。
所以:
input
变量。case i: input.equals("what you want")
。它们只是case "what you want"
。所以,相当于if
语句,如
input = scan.next();
if ( input.equals("T") ) {
outToServer.writeBytes("T\r\n");
System.out.println(inFromServer.readLine());
} else if ( input.equals("S") ) {
outToServer.writeBytes("S\r\n");
System.out.println(inFromServer.readLine());
}
...
实际上是:
input = scan.next();
switch ( input ) {
case "T" :
outToServer.writeBytes("T\r\n");
System.out.println(inFromServer.readLine());
break;
case "S" :
outToServer.writeBytes("S\r\n");
System.out.println(inFromServer.readLine());
break;
...
}
事实上,你可以把所有在同一个案例中做同样事情的案件连在一起:
input = scan.next();
switch ( input ) {
case "T" :
case "S" :
... // More case labels that should be treated the same
outToServer.writeBytes(input + "\r\n");
System.out.println(inFromServer.readLine());
break;
... // Other, non-similar cases
}