首页 > 解决方案 > 如何有效地将用户输入的字符转换为 Java 中的数值(双精度)?

问题描述

我是编程新手,尤其是在 Java 方面,所以请耐心等待可能是一个非常菜鸟的问题。我的主要目标是创建一个简单的程序,通过输入三个字符并将结果显示为双精度来计算用户的 GPA。对于这个程序,我只需要用相应的数值 (4.0-0.0) 来表示基本字母等级(没有 A+ 或 A- 或类似的东西,只有 AF)。

我能够让程序工作,但是我的问题在于我必须将用户的输入转换为/与小数相关联的方式。

正如您在下面的代码中看到的那样,我的方法是让用户输入他们的字母等级,创建一个单独的变量来保存每个类的每个字符的数值,并使用 if 语句来关联该值在其对应的类中具有对应的字符。虽然它似乎工作正常,但有没有更有效的方法来做到这一点?我发现 if 语句有点效率低下,因为它似乎有很多我想要完成的代码。

另外,附带说明一下,我使用 Eclipse 作为 Java 的主要 IDE,当我键入“Scanner in = new Scanner(System.in); 时,我不断在第一个“in”下收到黄色警告波浪线消息。 " 它说“资源泄漏:'in' 永远不会关闭”,我不知道这意味着什么。我的程序总是运行,但我讨厌在包资源管理器中看到我的文件上的警告标志:/

* Lab9.java
package labs;
import java.util.Scanner;

public class Lab9 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.print("Please input 3 letter grades: ");
        @SuppressWarnings("resource")
        Scanner in = new Scanner(System.in);
        char class1 = in.next() .charAt(0);
        char class2 = in.next() .charAt(0);
        char class3 = in.next() .charAt(0);
    
        double g1 = 0, g2 = 0, g3 = 0;
    
        if (class1 == 'A') {
            g1 = 4.0;
        }
        if (class1 == 'B') {
            g1 = 3.0;
        }
        if (class1 == 'C') {
            g1 = 2.0;
        }
        if (class1 == 'D') {
            g1 = 1.0;
        }
        if (class1 == 'F') {
            g1 = 0.0;
        }
    
        if (class2 == 'A') {
            g2 = 4.0;
        }
        if (class2 == 'B') {
            g2 = 3.0;
        }
        if (class2 == 'C') {
            g2 = 2.0;
        }
        if (class2 == 'D') {
            g2 = 1.0;
        }
        if (class2 == 'F') {
            g2 = 0.0;
        }
    
        if (class3 == 'A') {
            g3 = 4.0;
        }
        if (class3 == 'B') {
            g3 = 3.0;
        }
        if (class3 == 'C') {
            g3 = 2.0;
        }
        if (class3 == 'D') {
            g3 = 1.0;
        }
        if (class3 == 'F') {
            g3 = 0.0;
        }
    
        System.out.print("Your GPA is a "+((g1 + g2 + g3)/3));
    }
}

这是测试运行的输出:

Please input 3 letter grades: A C B
Your GPA is a 3.0

感谢您的帮助!

标签: javachardouble

解决方案


您可以为此使用“switch case”:

公共静态无效主要(字符串[]参数){

    System.out.print("Please input 3 letter grades: ");
    @SuppressWarnings("resource")
    Scanner in = new Scanner(System.in);
    char class1 = in.next().charAt(0);
    char class2 = in.next().charAt(0);
    char class3 = in.next().charAt(0);

    double g1 = 0, g2 = 0, g3 = 0;

    g1 = charToDouble(class1);
    g2 = charToDouble(class2);
    g3 = charToDouble(class3);

    System.out.print("Your GPA is a " + ((g1 + g2 + g3) / 3));
}

static double charToDouble(char className) {
    switch (className) {
        case 'A':
            return 4.0;
        case 'B':
            return 3.0;
        case 'C':
            return 2.0;
        case 'D':
            return 1.0;
        case 'F':
            return 0.0;
        default:
            throw new IllegalStateException("Unexpected value: " + (className));
    }
}

推荐阅读