0

Код выдает исключение 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);
}

}

Nowhere Man
  • 15,995
  • 33
  • 19
  • 29
edifff
  • 1

1 Answers1

0

Вы натолкнулись на классическую "проблему" новичков, указанную в вопросе-дубликате: Особенности использования 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];
// ...

Nowhere Man
  • 15,995
  • 33
  • 19
  • 29