解析用户输入以关联数组值

时间:2011-10-26 22:47:20

标签: 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)并读取它们输入的字母到我指定的相应值。如何根据我的数组解析字母输入?

2 个答案:

答案 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);
...

类型参数和自动装箱和拆箱使这些日子变得更方便。