#java
#java
Вопрос:
package programame;
import java.util.Scanner;
import java.util.Arrays;
public class E100 {
public static int ascendente(int a)
{
String str = Integer.toString(a);
String max[] = str.split("");
Arrays.sort(max);
String str1 = Arrays.toString(max);
int ascendente = Integer.parseInt(str1);
return ascendente;
}
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
int intentos = sc.nextInt();
int x = sc.nextInt();
System.out.println(ascendente(x));
}
}
Привет, я пытаюсь отсортировать int, прочитанный со сканера, но каждый раз, когда я запускаю его, он выдает мне ошибку =
Exception in thread "main" java.lang.NumberFormatException: For input string: "[3, 4, 6, 7]" at
java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Integer.parseInt(Integer.java:580) at
java.lang.Integer.parseInt(Integer.java:615) at
programame.E100.ascendente(E100.java:18) at
programame.E100.main(E100.java:25)
C:Usersagn12AppDataLocalNetBeansCache8.1executor-snippetsrun.xml:53: Java returned: 1
Комментарии:
1. пожалуйста, опубликуйте полную трассировку стека
2. Arrays.toString заключает «[» «]» в квадратные скобки.
Ответ №1:
Исключение
java.lang.NumberFormatException: For input string: "[3, 4, 6, 7]"
говорит, что Java не может преобразовать такую строку в Int, как вы запрашиваете.
Это может быть полезно для чтения ошибки компилятора:
programame.E100.ascendente(E100.java:18) в
programame.E100.main(E100.java:25)
В нем сообщается, что проблема возникает в строке 25 в методе main из E100.java это, в свою очередь, вызывает метод ascendente, и проблема возникает в строке 18, где вы пытаетесь преобразовать массив строк в int.
Ответ №2:
Вы пытаетесь разделить число 3467 на составляющие его десятичные цифры, отсортировать их и преобразовать цифры в одну строку:
String max[] = str.split("");
Arrays.sort(max);
String str1 = Arrays.toString(max);
Проблема в том, что Arrays.toString
возвращает удобочитаемое представление массива, которое имеет вид «[3, 4, 6, 7]». Это, очевидно, не может быть проанализировано как int. Вы ожидаете получить строку «3467».
Лучший способ сделать это (с точки зрения эффективности времени выполнения и простоты кодирования) — разбить строку на отдельные символы вместо односимвольных строк. Затем вы можете отсортировать их и легко превратить обратно в строку, используя один из конструкторов String:
char[] max = str.toCharArray();
Arrays.sort(max);
String str1 = new String(max);
Остальная часть вашего кода может остаться прежней.
Комментарии:
1. Я попробовал это, но выдает ошибку «char[] не может быть преобразован в String[]»
2. @A.Gisbert Извиняется, max — это массив символов, а не массив строк. Смотрите исправленную правку.
Ответ №3:
Ошибка связана с этой строкой
Строка str1 = Arrays.toString(максимум);
Вы пытаетесь преобразовать массив чисел в строку, поэтому max = [2]
Итак, str1 = «[2]»
а затем преобразовать это в число
int ascendente = Integer.parseInt(str1);
Выдает ошибку :: java.lang.NumberFormatException