我正在尝试为用户输入的字母等级分配一个数字。用户将输入一个字母,如A,B或C,然后根据它们输入的值存储在一个整数中。
我认为最简单的方法是设置一个数组,如:
char[] grade = char[] grade = {'A','B','C','D','F'};
grade[0] = 4;
grade[1] = 3;
// ... as so on
因此,每当用户输入“A”作为他们的成绩时,我会在需要时使用4。
我试图弄清楚如何读取输入(JOptionPane)并读取它们输入的字母到我指定的相应值。如何根据我的数组解析字母输入?
答案 0 :(得分: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跳 - 这是故意的吗?如果不是:
如果我们从输入和'A'中减去5的差值,我们得到5 - 0代表'A',5 - 1代表'B',依此类推。由于我们不想查找'A'的数字,我们直接使用'A',这很好,因为我们可以对字符执行算术运算。
我们还可以写
return 70 - input;
或
return 'F' - input;
线性方程的标准形式是y = mx + n,其中n是通过y轴(70)的切割,m = -1,梯度,在我们的情况下为负。
答案 1 :(得分:0)
将字符强制转换为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);
...
类型参数和自动装箱和拆箱使这些日子变得更方便。