Millerish
@Millerish

Java почему вылетает java.lang.NullPointerException?

Добрый вечер!

Разбираюсь в java. Почему у меня вылетает java.lang.NullPointerException, я же проверяю на Null? Как правильно?

import java.util.Arrays;
import java.util.Scanner;

public class l9 {

    public static void main(String[] args){
        class Arr{


            int[] mass;

            void sayLen(){
                if (mass == null) {
                    System.out.println("0");
                } else {
                    int len = this.mass.length;
                    System.out.println(len);
                }
            }

            void addToMass(int e){
                if (mass == null) {
                    this.mass[0] =e;
                } else {
                    this.mass[mass.length+1] = e;
                }

            }

        }

        Arr arr = new Arr();
        Scanner in = new Scanner(System.in);

        while (true){
            try {
                int a = in.nextInt();
                System.out.println(a);
                arr.addToMass(a);
                arr.sayLen();
            }
            catch (Throwable e){
                System.out.println(e);
                break;
            }

        }

    }
}
  • Вопрос задан
  • 997 просмотров
Решения вопроса 3
EugeneP2
@EugeneP2
Java Dev
А массив кто создавать будет?

int[] mass; - это ссылка на массив которая равна null, это означает, что любые обращения к ней, типа mass.length или mass[0] будут приводить NullPointerException. Вы пытаетесь узнать длину или получить доступ к нулевому элементу массива которого нет.

this.mass[mass.length+1] = e; - это вы что пытаетесь сделать? Присвоить значение ячейки массива, которая находится за пределами размера массива.... получите еще одно исключение.

Массив - структура фиксированной длины, т.е. уменьшать или увеличивать её размер нельзя, только заново пересоздавать и копировать элементы из старого в новый.

Индекс массива может принимать значение от 0 до length - 1.

В общем внимательно дочитайте всю главу о массивах...
Ответ написан
jamakasi666
@jamakasi666 Куратор тега Java
Просто IT'шник.
mass не инициализирован. Вообще лучше используй коллекции =D
List<Integer> mass;

            void sayLen(){
                if (mass == null) {
                    System.out.println("0");
                } else {
                    int len = this.mass.size();
                    System.out.println(len);
                }
            }
            void addToMass(int e){
                if (mass == null) {
                    mass = new ArrayList<>();
                    this.mass.add(e);
                } else {
                    this.mass.add(e);
                }

            }

        }
Ответ написан
Daniro_San
@Daniro_San
Программист
В Java массив - тоже класс, а значит по него должна быть выделена память в куче.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы