Выдает исключение NumberFormatException, хотя вводится число
Код выдает исключение NumberFormatException, хотя вводится число.
import java.util.Scanner;
public class praktika_1_1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
String s = sc.nextLine();
String arr[] = s.split(" ");
int t[] = new int[n];
for (int i = 0; i < n; i++) {
t[i] = Integer.parseInt(arr[i]);
}
int a[] = new int[arr.length + 1];
for (int i = 0; i < n; i++) {
a[i+1] = a[i] + t[i];
}
String ans = "";
for(int i = 0; i <a.length; i++) {
ans += Integer.toString(a[i]) + " ";
}
System.out.print(ans);
}
}
Ответы (1 шт):
Вы натолкнулись на классическую "проблему" новичков, указанную в вопросе-дубликате: Особенности использования scanner.nextLine(), так как использовали Scanner::nextLine после Scanner::nextInt.
На самом деле в представленном коде происходит следующее:
Scanner sc=new Scanner(System.in); // создали сканер ввода, ок
int n=sc.nextInt(); // прочитали число _без чтения перевода строки_
String s =sc.nextLine(); // прочитали **пустую** строку
String arr[]=s.split(" "); // получили массив с одной пустой строкой [""]
int t[]=new int[n]; // успешно создали массив n чисел
for(int i=0; i<n;i++) {
t[i]=Integer.parseInt(arr[i]); // NumberFormatException: For input string: ""
}
// ...
Если бы вдруг исключение NumberFormatException было перехвачено и обработано, то при попытке обратиться к следующему элементу массива arr произошёл бы выход за пределы массива, если бы n > 1.
Очевидное решение данной проблемы -- не смешивать nextInt и nextLine, тем более, что для заполнения массива целых чисел t достаточно вызвать nextInt известное число раз.
Scanner sc=new Scanner(System.in);
int n = sc.nextInt();
int t[] = new int[n];
for(int i = 0; i < n; i++) {
t[i] = sc.nextInt();
}
int a[] = new int[t.length + 1];
// ...