嵌套的 switch cases 和 string to char 的错误

Errors with the nested switch cases and string to char

我在尝试用我有限的 java 语言技能编写一个简单的标记范围程序时遇到了一些困难。基本上我想做的是让用户输入他们的评分级别,我会为他们提供他们的分数范围。我目前遇到该程序的多个问题。我正在尝试使用嵌套的 switch 案例,我在其中的经验为 0。我还需要只使用 char 来获取减号和加号,而且我不知道如何添加 "char"s嵌套开关盒的减号和加号。任何帮助将不胜感激,谢谢大家。

这是我的代码:

public class SwitchCase {

public static void main(String[] args) {

    String grade;

    String plusorminus ="+-";

    char plus=plusorminus.charAt(0);
    char minus=plusorminus.charAt(1);

     java.util.Scanner input=new java.util.Scanner(System.in);

     grade = input.toString();

    switch(grade)
    {
    case 1:
        switch("A"){
        System.out.println("Your mark range is 85-89.99%");
        case 1: A(0)
        System.out.println("Your mark range is 90-100%");
        case 2: A(1)
        System.out.println("Your mark range is 80-84.99%");
        }

    case 2:
         switch ("B"){
         System.out.println("Your mark range is 73-76.99%");
             case 1: B(0)
             System.out.println("Your mark range is 77-79.99%");
             case 2: B(1)
             System.out.println("Your mark range is 70.72.99%");
         }
     case 3:
         switch("C"){
           System.out.println("Your mark range is 63-66.99%");
           case 1: C(0)
           System.out.println("Your mark range is 67-69.99%");
           case 2: C(1)
           System.out.println("Your mark range is 60 - 62.99%");
         }
     case 4:
         switch("D"){
         System.out.println("Your mark range is 50-54.99%")
           case 1: D(0)
           System.out.println("Your mark range is 55-59.99%");
         }
     case 5:
         switch("F"){
         System.out.println("Your mark range is 0-49.99%")

         }

       }

    }

}

您的代码有几个问题:

  1. 你应该使用 input.next() 而不是 input.toString()
  2. switch(grade) 必须在 case 中使用 String,而不是 int
  3. switch("A") 没有意义,它只适用于 "A"。同样适用于 switch("B") 和类似的。
  4. 你不能在 switch(...) {case 声明之间有任何声明,像这样:

    switch ("B") {
        //line below must be removed.
        System.out.println("Your mark range is 73-76.99%");
        case 1: B(0)
    
  5. 每执行完case,就必须加上break语句,否则下一个case的代码也会被执行

  6. 您有这样的代码:

    A(0);
    A(1);
    B(1);
    

    这意味着您正在调用方法 AB...等等。如果你没有这样的方法(我想你还没有写过它们),这将不起作用。

我能想到的最简单的方法 - 根本不使用任何 switch 语句 - 是使用 Map 将所有可能的成绩作为键(因为它们是有限的)并且标记范围作为值。 为简单起见,现在将两者都表示为 String

通过这样的事情实现:

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class Grades
{
    public static void main(String[] args)
    {
        Map<String, String> marks = new HashMap<String, String>();
        marks.put("A+", "90-100");
        marks.put("A", "85-89");
        marks.put("A-", "80-84");
        marks.put("B+", "77-79");
        marks.put("B", "73-76");
        marks.put("B-", "70-72");
        marks.put("C+", "67-69");
        marks.put("C", "63-66");
        marks.put("C-", "60-62");
        marks.put("D+", "55-59");
        marks.put("D", "50-54");
        marks.put("F", "0-49");

        Scanner scanner = new Scanner(System.in);
        String grade = scanner.next();

        if(marks.containsKey(grade))
        {
            String markRange = "Your mark range is " + marks.get(grade) + " %";
            System.out.println(markRange);
        }
        else
        {
            System.out.println("Unknown grade");
        }
        scanner.close();
    }
}

如果您真的需要使用开关和字符,我会建议如下:

我们假设标记是输入中的第一个字符,修饰符 (+-) 是第二个字符。

对于外部开关,我们将打开标记字符,大小写将是你的成绩,如 'A'、'B'、'C' 等,内部循环类似但大小写为“+”和“-”

用“+”或“-”以外的值初始化修饰符 char,这样当没有修饰符 char 时,我们可以在内部开关中使用 default 大小写。

示例:

char mark = grade.charAt(0);
char modifier = 0;

if(grade.length() > 1)
{
    modifier = grade.charAt(1);
}

switch(mark)
{
    case 'A':
        switch(modifier)
        {
            case '+': System.out.println("A+"); break;
            case '-': System.out.println("A-"); break;
            default: System.out.println("A"); break;
        }
        break;
    case 'B':
        break;
    case 'C':
        break;
}