我的switch语句出了什么问题?

时间:2015-02-26 10:52:32

标签: java switch-statement

我试图在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;
}

5 个答案:

答案 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
}