#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.