Ho un piccolo problema con un programma JAVA. Sto provando a fare un algoritmo InsertionSort, ma sembra essere il problema con la conversione di String che il programma ottiene tramite stdin. Sembra che il programma sta lavorando con alcuni numeri, ma non funziona con questi numeri: https://dl.dropboxusercontent.com/u/57540732/numbers.txtNumberFormatException per String che sembra essere un numero
Questo è il mio algoritmo:
public class Sort {
private static ArrayList<String> insertionSort(ArrayList<String> arr) {
for (int i = 1; i < arr.size(); i++) {
int valueToSort = Integer.parseInt(arr.get(i).trim());
int j = i;
while (j > 0 && Integer.parseInt(arr.get(j - 1).trim()) > valueToSort) {
arr.set(j, arr.get(j-1));
j--;
}
arr.set(j, Integer.toString(valueToSort));
}
return arr;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
ArrayList<String> al;
String inputNumbers = sc.nextLine();
String[] xs = inputNumbers.split(" ");
al = new ArrayList<String>(Arrays.asList(xs));
al = insertionSort(al);
for (int i = 0; i<al.size(); i++) {
System.out.print(al.get(i) + " ");
}
}
}
Funziona con pochi numeri, ma non con i file che ho fornito a voi. Ottengo seguente eccezione:
Exception in thread "main" java.lang.NumberFormatException: For input string: "4531"
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 Sort.insertionSort(Sort.java:10)
at Sort.main(Sort.java:25)
Non so perché ottengo questa eccezione, perché la stringa di input è un numero (4531). Eventuali suggerimenti? Non posso copiare e incollare al dei numeri da file al terminale, quindi sto usando questo comando:
javac Sort.java
java Sort < numbers.txt
Credo che il problema è con nextLine() –
classe Scanner ha un metodo chiamato nextInt() e hasNextInt(). Forse dovresti provare a usarli invece di analizzare la stringa in un numero intero. – abekenza