我的任务是创建一个java程序,用户输入一个等级(D-到A +)并得到一个分数(0.7到4.3)
如果用户输入" A",他们会得到4 ...." B" = 3 ...." C" = 2 ...." D" = 1。
如果用户输入" +"或者" - "在一封信之后,最终分数增加或减少0.3
因此,例如,如果用户输入" C +",他们会得到" 2.3"
到目前为止,只有当用户没有添加" +"或" - "。
因此,如果用户只输入一个字母,那就可以了。
由于一些奇怪的原因,如果用户输入" +"或者" - "在一封信之后,输出将是" 0.3"或" -0.3"尊敬。
我不确定为什么。我的AP Comp Sci老师和我都很难过。
以下是我的代码的相关片段
String letterGrade;
double numericGrade;
Scanner reader = new Scanner(System.in);
public boolean getLetterGrade()
{
System.out.print("Enter a letter grade: ");
letterGrade = reader.nextLine();
return (letterGrade.length() < 3) && (("+".equals(letterGrade.substring(1))) || ("-".equals(letterGrade.substring(1))) || (letterGrade.length() == 1));
}
public double getNumericGrade()
{
numericGrade = 0.0;
switch(letterGrade.substring(0).toUpperCase())
{
case "A":
numericGrade += 4.0;
break;
case "B":
numericGrade += 3.0;
break;
case "C":
numericGrade += 2.0;
break;
case "D":
numericGrade += 1.0;
break;
case "F":
numericGrade += 0.0;
break;
}
if ("-".equals(letterGrade.substring(1)))
numericGrade -= 0.3;
if ("+".equals(letterGrade.substring(1)))
numericGrade += 0.3;
return numericGrade;
}
我的猜测是numericGrade
在切换语句后被重置为0,对我来说没有任何理由。
答案 0 :(得分:1)
String.substring(int position)
从位置开始返回子字符串,如果使用“1234”.substring(1),则返回“234”
在这种情况下,您使用"C+".substring(0)
,它返回C +而不是C,您需要String.charAt(0)
或String.substring(0, 1)
这就是为+/-修复所需的全部内容,但请注意,如果输入的字符串是长度为1(只是字母等级,A / B / C / D / F),那么您的程序将会因为你的if语句试图访问第二个字符而崩溃。如果输入的字符串太短,您应该检查长度并提前返回
答案 1 :(得分:0)
试试这个,一个简单的成绩翻译。如果您想了解更多此类问题的详细信息,可以使用Interpreter设计模式
进行检查public class Grades {
private double score = 0;
public double calculate(char c) throws IllegalArgumentException{
switch(c){
case 'A':
score += 4;
break;
case 'B':
score += 3;
break;
case 'C':
score += 2;
break;
case 'D':
score += 1;
break;
case '+':
score += 0.3;
break;
case '-':
score -= 0.3;
break;
default:
throw new IllegalArgumentException("Invalid Argument");
}
return score;
}
public static void main(String args[]){
Scanner reader = new Scanner(System.in);
Grades grade = new Grades();
String line = reader.nextLine();
while(!line.equals("exit")){
//validate argument here..
double value;
for ( int i = 0; i < line.length(); i++){
value = grade.calculate(line.charAt(i));
}
System.out.println("Grade = " + value);
line = reader.nextLine();
}
reader.close();
}