【问题标题】:Errors with the nested switch cases and string to char嵌套开关案例和字符串到 char 的错误
【发布时间】:2015-04-01 23:18:16
【问题描述】:

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

这是我的代码:

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%")

         }

       }

    }

}

【问题讨论】:

  • 你的中断语句在哪里?

标签: java string char nested switch-statement


【解决方案1】:

你的代码有几个问题:

  1. 你应该使用input.next() 而不是input.toString()
  2. switch(grade) 在这种情况下必须使用Strings,而不是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... 等等。如果您没有这样的方法(而且我认为您还没有编写它们),这将不起作用。

【讨论】:

  • 那么我应该怎么做才能得到每个年级的减号和加号?
【解决方案2】:

我能想到的最简单的方法 - 根本不使用任何 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;
}

【讨论】:

  • 这在未来会有很大帮助,但目前我需要使用 switch 语句和字符。非常感谢您的帮助。
  • 编辑了我上面的答案并为这种情况添加了一个建议,我希望你会发现它有用
猜你喜欢
  • 1970-01-01
  • 2020-11-02
  • 1970-01-01
  • 1970-01-01
  • 2016-01-16
  • 2014-07-26
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
相关资源
最近更新 更多