File fil = new File("Tall.txt");
FileReader inputFil = new FileReader(fil);
BufferedReader in = new BufferedReader(inputFil);
int [] tall = new int [100];
String s =in.readLine();
while(s!=null)
{
int i = 0;
tall[i] = Integer.parseInt(s); //this is line 19
System.out.println(tall[i]);
s = in.readLine();
}
in.close();
Saya mencoba menggunakan file "Tall.txt" untuk menulis bilangan bulat yang terkandung di dalamnya ke dalam array bernama "tall". Hal ini dilakukan sampai batas tertentu, tetapi juga ketika saya menjalankannya, ia melempar pengecualian berikut (:
Exception in thread "main" java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at BinarySok.main(BinarySok.java:19)
Mengapa sebenarnya ia melakukan hal ini, dan bagaimana cara menghapusnya? Seperti yang saya lihat, saya membaca file sebagai string, dan kemudian mengubahnya menjadi ints, yang tidak ilegal.
Anda harus memiliki baris kosong dalam file Anda.
Anda mungkin ingin membungkus pemanggilan parseInt Anda dalam blok "try":
try {
tall[i++] = Integer.parseInt(s);
}
catch (NumberFormatException ex) {
continue;
}
Atau cukup periksa string kosong sebelum melakukan parsing:
if (s.length() == 0)
continue;
Perhatikan bahwa dengan menginisialisasi variabel indeks Anda i
di dalam perulangan, maka variabel tersebut akan selalu 0. Anda harus memindahkan deklarasi sebelum perulangan while
. (Atau jadikan itu bagian dari perulangan for
.)
Sepertinya Java mencoba untuk mengubah string kosong menjadi angka. Apakah Anda memiliki baris kosong di akhir rangkaian angka?
Anda mungkin bisa memperbaiki kode seperti ini
String s = in.readLine();
int i = 0;
while (s != null) {
// Skip empty lines.
s = s.trim();
if (s.length() == 0) {
continue;
}
tall[i] = Integer.parseInt(s); // This is line 19.
System.out.println(tall[i]);
s = in.readLine();
i++;
}
in.close();
Anda mungkin mengalami kebingungan antara akhiran baris yang berbeda. File Windows akan mengakhiri setiap baris dengan carriage return dan line feed. Beberapa program di Unix akan membaca file tersebut seolah-olah file itu memiliki baris kosong tambahan di antara setiap baris, karena ia akan melihat carriage return sebagai akhir baris, dan kemudian melihat line feed sebagai akhir baris yang lain.