【问题标题】:Parsing user input to correlating array values解析用户输入以关联数组值
【发布时间】:2011-12-16 03:02:26
【问题描述】:

我正在尝试为用户输入的字母等级分配一个数字。用户将输入一个字母,例如 A、B 或 C,然后根据他们输入的内容将一个值存储在一个整数中。

我认为最简单的方法是设置一个数组,例如:

char[] grade = char[] grade = {'A','B','C','D','F'};
grade[0] = 4;
grade[1] = 3;
// ... as so on

因此,每当用户为他们的成绩输入“A”时,我都会在需要时使用 4。

我试图弄清楚如何读取输入 (JOptionPane) 并将他们输入的字母读取为我分配给它的相应值。如何根据我的数组解析输入的字母?

【问题讨论】:

    标签: java arrays parsing input


    【解决方案1】:

    我不确定,我是否理解正确:

    int grade (char input) 
    {
        return 5 - (input - 'A');
    }
    

    把它想象成一个图表。在计算机编码中,Ascii 或 UTF8 中,字符 A-F 是按顺序编码的,A 是最低的,但不是 0 或 1,而是 65 之类的,我们记不太清了。

      5  |               *
      4  |                 *   
      3  |                   * 
      2  |                     * 
      1  |                       *
      0  +-- ... ------------------*----->
                         A B C D E F 
                        65 6 7 8 9 70
    

    画这个图,我提到你从 D 跳到 F - 这是故意的吗?如果没有:

    如果我们从 5 中减去输入和“A”的差值,则“A”得到 5 - 0,“B”得到 5 - 1,依此类推。由于我们不想查找“A”的数字,我们直接使用“A”,这很好,因为我们可以对字符执行算术运算。

    我们也可以写

    return 70 - input;
    

    return 'F' - input;
    

    线性方程的标准形式是 y = mx + n,其中 n 是通过 y 轴 (70) 的切线,m = -1,梯度,在我们的例子中是负数。

    【讨论】:

    • 不需要。您不需要使用此方法的数组。发生的情况是算术导致 char 被强制转换为 int,从而允许从输入中减去它。基本上,您计算输入和 A 之间的“差异”。对于 A,这是 0。对于 B,这是 1。对于 C,这是 2。依此类推。然后将其从 4 中减去,这意味着 A 最终将产生 4,B 将产生 3,C 将产生 2,依此类推。为了确保使用安全,请在您的输入中做一些边界检查,以确保人们不提供 Z 或其他东西。
    • 如果我的上述评论有点令人困惑,请考虑您的输入是 65 到 69 之间的数字。我们首先要将其“标准化”为 0 到 5。所以我们从中减去 65。仅以“A”的形式。我们正在计算输入字符与“A”的偏移量。然后我们从 4 中减去它来得到你的结果。顺便说一句,您的原始帖子可能不得不说 E 而不是 F。除非您想要一些非线性评分系统。在这种情况下,您将需要一种不同的方法,例如地图。
    【解决方案2】:

    将字符转换为 int 可能更容易。 char 基本上具有 int 值。这样做:

    int i = (char)'A';
    

    将产生 65。对于小写 a,它将是 97。您可以将 char 转换为 int,然后使用该值进行边界检查和一些算术运算。连续的字母将产生连续的整数。这是安全的,因为您在 JVM 上运行并且不必考虑不同平台的 bizarro 字符集顺序。

    除此之外,看看您如何限制允许的输入,地图也可以很好地工作:

    Map<Character, Integer> grades = new HashMap<Character, Integer>();
    grades.put('A', 4); //optionally also: grades.put('a' 4);
    ...
    

    如今,键入参数以及自动装箱和拆箱使这变得更加方便。

    【讨论】:

    • 我基本上只是想询问用户他们在课堂上的成绩,然后根据该成绩,使用分配的数字,在本例中用作他们获得的学分数量班级。因此,如果他们输入的结果是 A,那么他们就获得了该课程的 4 个学分。
    • 我们收集到了这一点,即使如此,确切的上下文并不重要,因为您的问题很清楚。我和未知用户的方法都会做你想做的事。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-14
    • 2013-08-26
    • 1970-01-01
    • 2016-02-25
    • 2019-11-17
    相关资源
    最近更新 更多