将字符串转换为Double?

时间:2014-11-05 01:51:27

标签: java

这是一个带有测试人员类的两部分代码。出于某种原因,我无法弄清楚如何将此字符串变量转换为正确参与等式的函数gradeNum = grad - .3和gradeNum = grade + 0.3。有什么想法吗?

/** This is my class Grade */
    public class Grade
{

    private String grade;
    private double gradeNum;


// Constructor
public Grade(String showGrade)
{
    grade = showGrade;
    gradeNum = 0;
}


// getNumericGrade method to return grade number
public double getNumericGrade()
{
    if (grade.equalsIgnoreCase("A") || grade.equalsIgnoreCase("A+"))
{
    gradeNum = 4.0;
}
    else if (grade.equalsIgnoreCase("A-"))
{
    gradeNum = 3.7;
}


    if (grade.equalsIgnoreCase("B"))
{
    gradeNum = 3.0;
}
    else if (grade.equalsIgnoreCase("B+"))
{
    gradeNum = 3.3;
}
    else if (grade.equalsIgnoreCase("B-"))
{
    gradeNum = 2.7;
}


    if (grade.equalsIgnoreCase("C"))
{
    gradeNum = 2.0;
}
    else if (grade.equalsIgnoreCase("C+"))
{
    gradeNum = 2.3;
}
    else if (grade.equalsIgnoreCase("C-"))
{
    gradeNum = 1.7;
}


    if (grade.equalsIgnoreCase("D"))
{
    gradeNum = 1.0;
}
    else if (grade.equalsIgnoreCase("D+"))
{
    gradeNum = 1.3;
}
    else if (grade.equalsIgnoreCase("D-"))
{
    gradeNum = .7;
}

    if (grade.equalsIgnoreCase("F"))
{
    gradeNum = 0.0;
}

    return gradeNum;


    System.out.println("Invalid letter grade");
    return -1.0;


}
}


/** This is my class tester
 */

import java. util .Scanner;

/**
This program tests the numeric grade with a given letter grade.
*/
public class GradeTester 
{
public static void main(String[] args)
{
    Scanner in = new Scanner(System.in);

    System.out.println("Enter a letter grade: ");
    String showGrade = in.nextLine();

    Grade gg = new Grade(showGrade);

    System.out.print("Numeric Value: ");
    System.out.println(gg.getNumericGrade());

    in.close();

}
}

2 个答案:

答案 0 :(得分:1)

大卫的&肯的​​答案是正确的。您需要同时实现它们,然后另外删除一些return语句,然后代码将按预期工作。这是一个例子:

    if (Character.toUpperCase(grade.charAt(0)) == 'B')
        gradeNum = 3.0;
    if (grade.length() > 1 && Character.toUpperCase(grade.charAt(1)) == '-')
        gradeNum = gradeNum - 0.3;
    return gradeNum;

之前,由于您正在使用grade.equalsIgnoreCase("B")进行检查,因此输入的内容从未匹配为“B-”。因此,gradeNum永远不会有3.0的值。它仍为0.0,然后执行gradeNum = gradeNum - 0.3;,结果为-0.3

此外,您可以使用switch case而不是if语句。它会更优雅/可读性更强高效。

答案 1 :(得分:0)

使用:

而不是if (grade.equalsIgnoreCase("B"))
if (Character.toUpperCase(grade.charAt(0)) == 'B')

而不是grade.equalsIgnoreCase("A-")等,请使用:

if (grade.length() > 1 && grade.charAt(1) == '-')

这足以让您解决问题。

注意:还需要进行其他更改,但我不想只是为您提供正确的代码。