Разбор пользовательского ввода для сопоставления значений массива - PullRequest
0 голосов
/ 27 октября 2011

Я пытаюсь присвоить число буквенной оценке, которую вводит пользователь.Пользователь будет вводить буквы, такие как A, B или C, а затем, в зависимости от того, что они вводят, значение сохраняется в целом числе.

Я подумал, что самый простой способ сделать это - установить массив, такой как:

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

Поэтому, когда пользователь вводит «А» для своей оценки, я использую 4, когда мне нужно.

Я пытаюсь выяснить, как читать входные данные (JOptionPane) и прочитайте письмо, которое они вводят в соответствующее значение, которое я ему присвоил.Как мне разобрать ввод букв на основе моего массива?

Ответы [ 2 ]

1 голос
/ 27 октября 2011

Я не уверен, правильно ли я вас понял:

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

Думайте об этом как о графике.В компьютерном кодировании, Ascii или UTF8, символы AF последовательно кодируются, причем 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', мы получим 5 - 0 для 'A', и 5 - 1 для 'B' и так далее.Так как мы не хотим искать число для «A», мы используем «A» напрямую, что хорошо, так как мы можем выполнять арифметику для символов.

Мы могли бы также написать

return 70 - input;

или

return 'F' - input;

Стандартной формой линейного уравнения является y = mx + n, где n - прорезьось Y (70) и m = -1, градиент, отрицательный в нашем случае.

0 голосов
/ 27 октября 2011

Может быть проще просто привести персонажа к int. char в основном имеет значение int. Делаем это:

int i = (char)'A';

даст 65. Для нижнего регистра a это будет 97. Вы можете привести char к int, а затем использовать это значение для проверки границ и некоторой арифметики. Последовательные буквы будут давать последовательные целые числа. Это безопасно, поскольку вы работаете на JVM и не должны принимать во внимание причудливые наборы символов для разных платформ.

Кроме того, учитывая, что вы ограничили допустимые входные данные, карта также может хорошо работать:

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

Тип params, автобокс и распаковка делают это намного удобнее в наши дни.

...