Tôi có một vấn đề nhỏ với một chương trình JAVA. Tôi đang cố gắng để làm một thuật toán InsertionSort, nhưng nó có vẻ là vấn đề với chuyển đổi String chương trình được thông qua stdin. Nó có vẻ như chương trình đang làm việc với vài con số, nhưng nó không làm việc với những con số: https://dl.dropboxusercontent.com/u/57540732/numbers.txtNumberFormatException cho Chuỗi có vẻ là một số
Đây là thuật toán của tôi:
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) + " ");
}
}
}
Nó hoạt động với vài con số, nhưng không phải với file tôi cung cấp cho bạn. Tôi nhận được ngoại lệ sau:
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)
Tôi không biết tại sao tôi nhận ngoại lệ này, vì chuỗi đầu vào là một số (4531). Bất kỳ đề xuất? tôi không thể sao chép và dán al của các số từ tập tin vào thiết bị đầu cuối, vì vậy tôi đang sử dụng lệnh này:
javac Sort.java
java Sort < numbers.txt
tôi nghĩ rằng vấn đề là với nextLIne() –
lớp Scanner có một phương pháp gọi là nextInt() và hasNextInt(). Có lẽ bạn nên thử sử dụng chúng thay vì phân tích chuỗi thành một số nguyên. – abekenza