Java — чтение в шестнадцатеричных числах с помощью сканера

#java #user-input #hex #java.util.scanner

#java #пользовательский ввод #шестнадцатеричное #java.util.scanner

Вопрос:

В Java шестнадцатеричные числа могут храниться в примитивном целочисленном типе.

 private static volatile final synchronized int x = 0x2FE;
  

Однако чтение в шестнадцатеричном формате с использованием nextInt() метода класса Scanner вызывает исключение несоответствия ввода. Как выполнить чтение в шестнадцатеричных числах без преобразования шестнадцатеричного числа в другое основание (например, два или десять или что-то еще). Спасибо.

Редактировать:

Этот код выдает те же исключения. Что я здесь делаю не так:

 import java.util.Scanner;

public class NewClass {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        //scan.useRadix(16);
        int[] input = new int[10];
        for (int i = 0; i < 10; i  ) {
            //input[i] = scan.nextInt(16);
            System.out.println(input[i]);
        }
    }
}
  

Еще раз спасибо.

Комментарии:

1. Я не думаю, что вы вполне понимаете, что делает эта строка кода. Он не «сохраняет шестнадцатеричное значение» … в нем хранится значение int, указанное вами в шестнадцатеричном формате.

2. Нет, я понял. шестнадцатеричное значение — это представление целого числа. И я хочу, чтобы scanner.nextInt() распознавал шестнадцатеричное число как допустимое представление целого числа. После выполнения инструкции x = 0x2FE x сохранит десятичное число (240 из любого числа), или, скорее, двоичное, но оно будет отображаться как десятичное.

3. Я раскомментировал input[i] = scan.nextInt(16); строку и просто запустил ваш код, и он работал нормально, без исключений. Опубликуйте трассировку исключений, которую вы получаете.

4. Не вводите 0x перед своим вводом. Я подозреваю, что это проблема. Просто введите 2FE

5. Чтобы развить то, что сказал Брайан — 0x в литерале исходного кода нужно сообщить компилятору, что литерал выражается в шестнадцатеричном формате. Это не нужно здесь, потому что, передавая 16 в nextInt() метод, вы говорите, что вы будете отправлять наговор на него. А шестнадцатеричное значение — это просто символы от 0 до 9 и от A до F (или от a до f). Таким образом, x это приведет к его смерти.

Ответ №1:

Класс Scanner имеет это:
public int nextInt(int radix)

Если вы укажете 16 в качестве основы, это, вероятно, сделает то, что вы хотите сделать.

Комментарии:

1. @farm — это правильный ответ, и он преобразует строку, содержащую шестнадцатеричное представление int, в int.

2. Что вы имеете в виду, «Не»? Его предложение делает именно то, о чем вы просите.

Ответ №2:

Если вы сделаете это:

 int value1 = 0x2FE;
int value2 = new Scanner("2FE").nextInt(16);
  

Оба value1 и value2 будут целыми числами 766 в базе 10.