Zapis i odczyt do pliku w Javie, konieczność uruchamiania 2 razy

0

Witam, w moim kodzie napisałem taki fragment kodu odpowiedzialny za zapis do pliku wprowadzonych danych. Gdy chcę je odczytać muszę ponownie uruchamiać konsole. Co w moim kodzie jest nie tak? Program pisałem w Eclipse. Pozdrawiam

case 9:
      PrintWriter zapis = new PrintWriter("studenci.txt");
          
        for (k=0 ; k < ile_jest ; k++)
            {
                if(s[k] != null)
                {  
                    
                    zapis.println(s[k].imie);
                    zapis.println(s[k].nazwisko);
                    zapis.println(s[k].nrIndeksu);
       
                }
                
            }
          zapis.close();
 break;
 //wczytywanie danych z pliku i wyswietlenie ich w konsoli
 case 10:
     
        File file = new File("ala.txt");
        Scanner in = new Scanner(file);

        while(in.hasNext())
        {
           String imie = in.next();
           String nazwisko = in.next();
           String indeks = in.next();
           System.out.println(imie+" "+nazwisko+" "+indeks);
        }
 break;
0

Kod wygląda poprawnie, a ja zupełnie nie rozumiem na czym polega problem. Np. co znaczy zwrot

ponownie uruchomiać konsole

0

Chodzi o to że, gdy zapisze plik (case 9) to już nic nie mogę wpisać i dopiero ponowne uruchomienie pozwala mi odczytać ten plik.

0

Lekcja na dziś: pętle.
A to co masz w każdym case wrzuć do osobnych funkcji. Żadna funkcja (main tym bardziej!) ma nie być dłuższa niż 20 linijek.

0
Shalom napisał(a):

Żadna funkcja (main tym bardziej!) ma nie być dłuższa niż 20 linijek.

Mam nadzieję, że piszesz wyłącznie o tym przypadku.
Ogólnie to byłoby bardzo nieintuicyjne i dosyć upierdliwe(np zigzag wygodniej chyba zapisać w jednym kawałku ok 50 linii).

0

Nie, mówie o przypadku ogólnym. Zdarza się czasem że potrzeba trochę więcej niż 20 linijek, ale to raczej bardzo wyjątkowe sytuacje. Wystarczy ze masz w funkcji if'a i już proponowałby rozbić to na 3 osobne funkcje (ta z ifem i po jednej na każdy przypadek). Dzięki temu nie mieszasz poziomów abstrakcji i możesz poprawiać błędy w kodzie bez konieczności schodzenia od razu na niski poziom.

0
Shalom napisał(a):

Nie, mówie o przypadku ogólnym. Zdarza się czasem że potrzeba trochę więcej niż 20 linijek, ale to raczej bardzo wyjątkowe sytuacje. Wystarczy ze masz w funkcji if'a i już proponowałby rozbić to na 3 osobne funkcje (ta z ifem i po jednej na każdy przypadek). Dzięki temu nie mieszasz poziomów abstrakcji i możesz poprawiać błędy w kodzie bez konieczności schodzenia od razu na niski poziom.

Tu masz oczywiście rację.

1 użytkowników online, w tym zalogowanych: 0, gości: 1