switch 语句中的字符语句 case 值无效

Invalid character statement case value in switch statement

我的代码告诉我大小写 'A+' 是一个无效的字符语句,但我需要能够有大小写 A+、A、A- 等等。我想知道的是:我可以根本没有 + 或 - 在 case 值内吗?如果是这样,是否有任何其他方法可以识别用户在控制台中输入的内容。我一直无法找到浏览周围的答案。感谢您的帮助!

import java.util.Scanner;

public class GradeAdvice {

public static void main(String[] args) {


    // User will input grade and program will give advice corresponding 
    // to that grade

    // Prompt use for their grade
    System.out.println("What was your grade on the midterm?");

    char midtermGrade;

    // Create an input object
    Scanner input = new Scanner(System.in);
    midtermGrade = input.next().charAt(0);

    // Determine which advice to give based on grade
    switch (midtermGrade)
    {
        case 'A+' : 
        case 'a+' : System.out.println("Continue doing what you have been doing, ask questions"); 
            break;
        default: System.out.println("This grade is invalid.");
            break;

}
    // Close input
    input.close();
}

}

"A+",字符串用双引号,字符用单引号。

Java 中的字符文字在单引号内标识一个字符,而不是多个字符。对于多个字符,您必须使用 String,由双引号字符分隔。

在 Java 7+ 中,您可以使用 String 作为大小写标签,例如

case "A+":

但是你只使用了输入的第一个字符。变化

char midtermGrade;
midtermGrade = input.next().charAt(0);

String midtermGrade;
midtermGrade = input.next();

一个char可以容纳一个字符。相反,您可以只使用 String:

String midtermGrade;

// Create an input object
Scanner input = new Scanner(System.in);
midtermGrade = input.next();

// Determine which advice to give based on grade
switch (midtermGrade)
{
    // Note that strings are denoted by "s, not 's.
    case "A+" : 
    case "a+" : System.out.println("Continue doing what you have been doing, ask questions"); 
        break;
    default: System.out.println("This grade is invalid.");
        break;
}

A+是字符串,不是字符。您可以在 C# 中完成此操作(使用 " 而不是 '),但不能在 Java 中完成,大多数其他语言也不能。最简单的方法可能是将开关转换为一系列 'if'声明。

这是因为您使用的是字符而不是字符串。一个字符正是它所说的,一个字符。 A+ 是两个字符 A 和 +。对字符串文字使用双引号 (")。例如:

'A' \ This is a character
"A" \ This is a string

"A+" 不是 char ,它是 string 定义为 string 。

使用String,并规范化大小写

switch( input.next().toUpperCase() )
{
    case "A+" :
        ...
    default :
        ...
}