Java 将用户输入解析为关联数组值

Java 将用户输入解析为关联数组值,java,arrays,parsing,input,Java,Arrays,Parsing,Input,我试图为用户输入的字母等级分配一个数字。用户将输入一个字母,如a、B或C,然后根据他们输入的内容将值存储在整数中 我认为最简单的方法是设置一个数组,例如: char[] grade = char[] grade = {'A','B','C','D','F'}; grade[0] = 4; grade[1] = 3; // ... as so on 因此,每当用户为他们的分数输入“a”时,我会在需要时使用4 我试图找出如何读取输入(JOptionPane),并将他们输入的字母读取到我分配给它的相

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

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

char[] grade = char[] grade = {'A','B','C','D','F'};
grade[0] = 4;
grade[1] = 3;
// ... as so on
因此,每当用户为他们的分数输入“a”时,我会在需要时使用4


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

将字符转换为int可能更容易。A
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);
...
Map grades=newhashmap();
等级。放置('A',4)//也可以选择:grades.put('a'4);
...

键入参数和自动装箱和拆箱使这些天的操作更加方便。

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

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;


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

我基本上只是想问用户他们在一个类中得到了什么分数,然后基于该分数,使用分配的数字,在本例中,该数字用作他们为一个课程获得的学分数量。因此,如果他们的成绩是A,那么他们就可以得到该课程的4个学分。我们收集到了这一点,尽管如此,确切的背景并不重要,因为你的问题很清楚。my和user unknown的方法都可以满足您的要求。无需。使用此方法不需要数组。所发生的情况是,算术伦理导致字符被转换为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。除非你想要一些非线性的评分系统。在这种情况下,您将需要一种不同的方法,如地图。
return 'F' - input;