我有一个java应用程序将输入等级A,B,C,D,E和F转换为GPA点,但我有错误不确定错误在哪里,我也可以改进下面的代码,以便用户不用输入等级以外的输入?
import java.lang.*;
import java.io.*;
import java.util.*;
import java.util.Scanner;
public class Program
{
public static void main(String[] args)
{
Scanner keyboard = new Scanner (System.in);
String letterGrade = " ";
double gradePoints;
boolean error = true;
System.out.println("Enter A Letter Grade: ");
letterGrade = keyboard.next();
if( letterGrade == "A+")
{
gradePoints = 4.0;
}
else if ( letterGrade == "A")
{
gradePoints = 4.0;
}
else if( letterGrade == "A-")
{
gradePoints = 3.67;
}
else if ( letterGrade == "B+")
{
gradePoints = 3.33;
}
else if( letterGrade == "B")
{
gradePoints = 3.0;
}
else if ( letterGrade == "B-")
{
gradePoints = 2.67;
}
else if( letterGrade == "C+")
{
gradePoints = 2.33;
}
else if ( letterGrade == "C")
{
gradePoints = 2.0;
}
else if( letterGrade == "F")
{
gradePoints = 0.0;
}
else(error)
{
System.out.println("Error, you did not enter the correct information");
}
if(!error)
{
System.out.println("Your grade point(GPA) is " + gradePoints);
}
}
}
答案 0 :(得分:1)
你必须使用equals()方法检查字符串相等性
if(letterGrade = "A+")
to
if(letterGrade.equals("A+"))
但是,你要给letterGrad分配“A +”而不检查letterGrad == A +
=
是赋值运算符,==
是相等运算符(用于检查两个基元是否具有相等的值,或者两个对象引用是否指向同一对象)。 '.ququals()'是java.lang.Object()类中的一个方法,用于检查两个对象是否等于。
答案 1 :(得分:1)
第一
您不会将字符串(或其他对象)与==
进行比较;您使用equals
方法。直接与==
比较会告诉您两个对象是否相同,而不是它们的值是否相同。对于字符串,在您的程序中equalsIgnoreCase
会更合适。
另外,请注意,比较运算符为==
; =
是赋值运算符,不检查是否相等; letter = "F"
在letter
中放入一个包含F
的新对象。您的错误是由于表达式letter = "F"
“返回”正在分配的值(一个字符串保存为“F”)。
做
if (letter = "F") {
装置
letter <-- new String("F")
if ("F") <-- This does not compile because it expects a boolean (if (true) or if(false)
关于输入控件,你不能做太多的事情,否则你需要一个GUI。
答案 2 :(得分:0)
以这种方式检查
else if( letterGrade.equalsIgnoreCase("A-"))
{
gradePoints = 3.7;
}
其他地方也有变化
如果您想检查用户输入是否有效,可以这样检查
String grades = "A+B+CDA-";
if(grades.indexOf("A")==0){
System.out.println("imhere");
}
答案 3 :(得分:0)
首先,您的if
声明是错误的。
应为if( letterGrade == "A+")
。
请注意,您应该使用==
进行比较。
如果你想比较两个字符串而不是java提供了更好的方法来匹配字符串的内容,因为==
运算符比较引用而不是内容。
if(letterGrade.equals("A+"))
或if( "A+".equals(letterGrade))
如果letterGrade的内容与“A +”匹配,则两者都将返回布尔值(true
,如果不匹配,则返回false
。