嵌套切换案例和字符串到char的错误

时间:2015-02-02 21:50:09

标签: java string char nested switch-statement

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

         }

       }

    }

}

2 个答案:

答案 0 :(得分:1)

您的代码存在一些问题:

  1. 您应该使用input.next()而不是input.toString()
  2. switch(grade)必须使用String s,而不是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语句,否则下一个案例的代码也会被执行。

  6. 你有这样的代码:

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

    这意味着您正在调用方法AB ......等等。如果您没有这样的方法(我认为您还没有写过),这将无法奏效。

答案 1 :(得分:0)

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