Java charAt метод, возвращающий значения, даже не являющиеся частью строки - PullRequest
0 голосов
/ 10 ноября 2018

Я работаю в лаборатории сортировки по основанию для своего курса по компьютерным наукам в колледже, но продолжаю сталкиваться с ошибкой. Мне нужно получить значение цифры в определенном месте, чтобы сделать это, я преобразовал число в строку и использовал charAt (2) пользователя, чтобы получить цифру 587. Однако charAt возвращает 55, что не имеет смысла и тогда я получаю индекс из-за ошибки границ, потому что число должно быть одной цифрой от 0-9. метод берет заголовок связного списка, удаляет его из связанного списка, а затем берет удаленный узел и добавляет его в корзину.

  String s = null;
  String val;


    for(int i = 0; i <count;i++){

     int temp = (Integer)tempNode.getValue();

     val = temp+"";

     int dval = (int) val.charAt(mod);

     tempNode =(name.removeFirst(s));

     bucket[dval].addToEnd(tempNode);
     tempNode = name.getHead();

 }

Ответы [ 2 ]

0 голосов
/ 10 ноября 2018

Мне кажется, вы хотите определить индекс bucket (от 0 до 9), основываясь на последней цифре числа temp. Вместо того, чтобы идти в обход String / charAt / getNumericValue(), вы можете просто использовать оператор «деления покоя» Java:

int dval = temp % 10;

или обобщенно (если вы не хотите придерживаться ровно 10 ведер):

int dval = temp % bucket.length;

Просто убедитесь, что temp не становится отрицательным, так как тогда остаток деления также становится отрицательным :-(. Помимо того, что он короче и менее подвержен ошибкам, подход деления-остатка также намного быстрее.

0 голосов
/ 10 ноября 2018

То, что вы делаете с (int) val.charAt(mod) - это получение значения ascii для символа, посмотрите на , что действительно 55 для символа 7. Вам нужно Character.getNumericValue(), чтобы получить числовое значение этого символа.

String str = "7";

System.out.println((int) str.charAt(0)); // Prints 55
System.out.println(Character.getNumericValue(str.charAt(0))); // Prints 7
...