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 (помечена)
  • Вопрос задан
  • 91 просмотр
Решения вопроса 1
DennisKingsman
@DennisKingsman Автор вопроса
Студент
причем
name = scanner.nextLine();
 for(int i = 0; i < lenOfThird; ++i)
        {
            name = scanner.nextLine();
            thirdTimes[i]= new Person(i + 1, name);
        }

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

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

Похожие вопросы