Pomijanie klasy Scanner w pętli za drugim razem.

0

Witam!

Aktualnie zaczyna się uczyć javy i mam taki problem:

import java.util.Scanner;
 
public class Punkt{
        String imie;
        String nazwisko;
        int wiek;
 
        Scanner odczyt = new Scanner(System.in);
        public Punkt()
        {
                imie="nie podano";
                nazwisko="nie podano";
                wiek=0;
        }
 
        public Punkt(String i, String n, int w)
        {
                imie=i;
                nazwisko=n;
                wiek=w;
        }
        public Punkt(Punkt pkt)
        {
                imie=pkt.imie;
                nazwisko=pkt.nazwisko;
                wiek=pkt.wiek;
 
        }
 
        String imie()
        {
                System.out.println("Podaj imię:");
                String imie=odczyt.nextLine();
                return imie;
        }
 
        String nazwisko()
        {
                System.out.println("Podaj nazwisko:");
                String nazwisko=odczyt.nextLine();
                return nazwisko;
        }
 
        int wiek()
        {
                System.out.println("Podaj wiek:");
                int wiek=odczyt.nextInt();
                return wiek;
        }
 
}

public class Test{
 
        public static void main(String args[]){
              
 
                Punkt punkt = new Punkt();
                Punkt[] pracownicy = new Punkt[3];
                //for(int i=0; i<3; i++)
                //{        
                pracownicy[0] = new Punkt(punkt.imie(), punkt.nazwisko(), punkt.wiek());
                //}
 
                pracownicy[1] = new Punkt(punkt.imie(), punkt.nazwisko(), punkt.wiek());
                pracownicy[2] = new Punkt(punkt.imie(), punkt.nazwisko(), punkt.wiek());
 
                for(Punkt p: pracownicy)
                        System.out.println("prac: "+p.imie+" "+p.nazwisko+" "+p.wiek);
        }
}

i wywala mi w konsoli:

Podaj imię:
Jan
Podaj nazwisko:
Kowalski
Podaj wiek:
56
Podaj imię:
Podaj nazwisko:
Kopytko
Podaj wiek:
45
Podaj imię:
Podaj nazwisko:
Nowak
Podaj wiek:
56
prac: Jan Kowalski 56
prac:  Kopytko 45
prac:  Nowak 56

I pytam się dlaczego pomija mi za 2 i 3 razem "podaj imię" i przechodzi od razu do nazwiska?
Z góry dzięki za pomoc.

0

Bo w tym wierszu

int wiek=odczyt.nextInt();

pobierasz z wejścia tylko znaki tworzące liczbę, zostawiasz natomiast Enter. Następne nextLine() (to w pytaniu o imię) pobiera z wejścia ten pozostawiony Enter.
P.S. kod jest koszmarny

0

Czyli co mam zrobić, żeby działało?
Kod tak wygląda bo, po 1 uczę się dopiero, a po 2 przerabiałem go z innego kodu, który miałem stworzyć w zadaniu, a po tym jak skończyłem chciałem z ciekawości sprawdzić jak zadziała taka przeróbka, lecz nie chciałem kasować tego co już zrobiłem.

0

Np. tak:

        int wiek()
        {
                System.out.println("Podaj wiek:");
                int wiek=odczyt.nextInt();
                odczyt.nextLine();
                return wiek;
        }

Nie pokazuj tego kodu w szkole, dwója murowana.
0

A dlaczego twierdzisz, że kod jest aż taki zły? Dlatego, że klasa Punkt jest zawile napisana, czy klasa Test? Wiem, że w klasie Test mogłem zapisać to za pomocą pętli, a w Punkt bez

 public Punkt(Punkt pkt)
        {
                imie=pkt.imie;
                nazwisko=pkt.nazwisko;
                wiek=pkt.wiek;
 
        }

też by zadziałało.

Jeśli możesz to pokaż jak ten kod mógłby wyglądać, żeby był lepszy. Będę bardzo wdzięczny.
P.S. To nie jest do szkoły, próbuję się sam coś nauczyć z kursu internetowego :)

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