DennisKingsman
@DennisKingsman
Студент

Почему пустует первый элемент массива?

Есть код в котором я тремя способами записываю объекты в файл и потом в другом классе их достаю из файла
public class WriteObject
{
    public static void main(String[] args) throws IOException
    {
        // first
        Person person1 = new Person(1, "Mike");
        Person person2 = new Person(2, "Bobe");

        FileOutputStream fos = new FileOutputStream("people.bin");
        ObjectOutputStream oos = new ObjectOutputStream(fos);

        oos.writeObject(person1);
        oos.writeObject(person2);

        oos.close();

        // Second
        Person[] people = new Person[3];
        Scanner scanner = new Scanner(System.in);
        String name;

        for(int i = 0; i < people.length; ++i)
        {
            name = scanner.nextLine();
            people[i]= new Person(i + 1, name);
        }

        FileOutputStream fileOutputStream = new FileOutputStream("person.bin");
        ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);

        objectOutputStream.writeInt(people.length);

        for(Person person : people)
        {
            objectOutputStream.writeObject(person);
        }

        objectOutputStream.close();

        // Third
        System.out.println("Enter len of third ");
        int lenOfThird = scanner.nextInt(); // 47

        Person[] thirdTimes = new Person[lenOfThird];

        for(int i = 0; i < lenOfThird; ++i)
        {
            name = scanner.nextLine();
            thirdTimes[i]= new Person(i + 1, name);
        }

        FileOutputStream fileOutputStreamOfThird = new FileOutputStream("third.bin");
        ObjectOutputStream objectOutputStreamOfThird = new ObjectOutputStream(fileOutputStreamOfThird);

        objectOutputStreamOfThird.writeObject(thirdTimes);

        objectOutputStreamOfThird.close();
        scanner.close();
    }
}


Проблема в том, что когда я создаю третий массив и начинаю заполнять с консоли, он оставляет первый элемент пустым
допустим если размерность [2] , то он дает ввести только одно имя и завершает работу и это имя присваивается второму объекту. Пробовал закрыть старый объект класса Сканер и открыть новый перед выполнением Third , но тогда он даже не хочет считывать размерность и выдает ошибку в строке 47 (помечена)
  • Вопрос задан
  • 90 просмотров
Решения вопроса 1
DennisKingsman
@DennisKingsman Автор вопроса
Студент
причем
name = scanner.nextLine();
 for(int i = 0; i < lenOfThird; ++i)
        {
            name = scanner.nextLine();
            thirdTimes[i]= new Person(i + 1, name);
        }

Работает как надо
хотя было бы логичнее (если уж вставлять эту строку перед циклом ) то в цикле поставить ее после создания нового объекта, но так не работает
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽
19 апр. 2024, в 14:12
30000 руб./за проект
19 апр. 2024, в 14:10
500 руб./за проект