Java-Ошибка при попытке отсортировать int

#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