嵌套的 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%")
}
}
}
}
您的代码有几个问题:
- 你应该使用
input.next()
而不是 input.toString()
switch(grade)
必须在 case 中使用 String
,而不是 int
。
switch("A")
没有意义,它只适用于 "A"
。同样适用于 switch("B")
和类似的。
你不能在 switch(...) {
和 case
声明之间有任何声明,像这样:
switch ("B") {
//line below must be removed.
System.out.println("Your mark range is 73-76.99%");
case 1: B(0)
每执行完case
,就必须加上break
语句,否则下一个case的代码也会被执行
您有这样的代码:
A(0);
A(1);
B(1);
这意味着您正在调用方法 A
、B
...等等。如果你没有这样的方法(我想你还没有写过它们),这将不起作用。
我能想到的最简单的方法 - 根本不使用任何 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;
}
我在尝试用我有限的 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%")
}
}
}
}
您的代码有几个问题:
- 你应该使用
input.next()
而不是input.toString()
switch(grade)
必须在 case 中使用String
,而不是int
。switch("A")
没有意义,它只适用于"A"
。同样适用于switch("B")
和类似的。你不能在
switch(...) {
和case
声明之间有任何声明,像这样:switch ("B") { //line below must be removed. System.out.println("Your mark range is 73-76.99%"); case 1: B(0)
每执行完
case
,就必须加上break
语句,否则下一个case的代码也会被执行您有这样的代码:
A(0); A(1); B(1);
这意味着您正在调用方法
A
、B
...等等。如果你没有这样的方法(我想你还没有写过它们),这将不起作用。
我能想到的最简单的方法 - 根本不使用任何 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;
}