Funkcja Scanner do kilku obiektów.

0

Mam za zadanie stworzyc wprowadzanie danych kilku studentów z klawiatury. Nie chce zeby jakies imie i nazwisko zostalo przypisane do wszystkich. Tylko do kazdego z osobna. Jak widac ponizej program dziala źle.
Tresc zadania: Utwórz, która umożliwia wprowadzanie danych studenta z konsoli. Użyj do tego celu
znanego już obiektu Scanner oraz klasy Student z zadania 2.


package studia;

import java.util.Scanner;

public class Studia {
    public static void main(String[] args) {
       
      Scanner scan = new Scanner(System.in);
      System.out.println("Podaj imie, nazwisko, numer indeksu: ");
      String imie = scan.next();
      String nazwisko = scan.next();
      int numer_albumu = scan.nextInt();
       
      Student student1 = new Student(imie,nazwisko,numer_albumu,"Informatyka niestacjonarne",1);
       student1.PokazDane();
       
       System.out.println("--------------------------");
       
       Student student2 = new Student(imie, nazwisko);
       student2.PokazDane();
       
       System.out.println("--------------------------"); 
       
       Student student3 = new Student(2883);
       student3.PokazDane();
       
       System.out.println("--------------------------"); 
       
       Student student4 = new Student("Krzysiek", "Onar", "Bezpieczenstwo wewnetrzne");
       student4.PokazDane();
       
    }
    
}

package studia;
public class Student {
    String imie;  // pola klasy 
    String nazwisko;
    int numer_indeksu;
    String nazwa_specjalnosci;
    int rok_studiow;
    
    public Student(String imie, String nazwisko, int numer_indeksu, String nazwa_specjalnosci, int rok_studiow){ // konstruktor I
    this.imie = imie;
    this.nazwisko = nazwisko;
    this.numer_indeksu = numer_indeksu;
    this.nazwa_specjalnosci= nazwa_specjalnosci;
    this.rok_studiow = rok_studiow;
    }
    
    public Student(String imie, String nazwisko){ // konstruktor II
    this.imie = imie;
    this.nazwisko = nazwisko;
    
    }
    
    public Student(int numer_indeksu){     // konstruktor III
    this.numer_indeksu = numer_indeksu;
    } 
    public Student(String imie, String nazwisko, String nazwa_specjalnosc){  // konstruktor IV
    this.imie= imie;
    this.nazwa_specjalnosci = nazwa_specjalnosc;
    this.nazwisko = nazwisko;
    }
    
    public void PokazDane(){
    
        System.out.println("Imie: "+this.imie);
        System.out.println("Nazwisko: "+this.nazwisko);
        System.out.println("Numer indeksu: "+this.numer_indeksu);
        System.out.println("Nazwa specjalnosci : "+this.nazwa_specjalnosci);
        System.out.println("Rok studiow : "+this.rok_studiow);
    }
}

oto wynik:

Podaj imie, nazwisko, numer indeksu: 
Jan
Kowalski
2016
Imie: Jan
Nazwisko: Kowalski
Numer indeksu: 2016
Nazwa specjalnosci : Informatyka niestacjonarne
Rok studiow : 1
--------------------------
Imie: Jan
Nazwisko: Kowalski
Numer indeksu: 0
Nazwa specjalnosci : null
Rok studiow : 0
--------------------------
Imie: null
Nazwisko: null
Numer indeksu: 2883
Nazwa specjalnosci : null
Rok studiow : 0
--------------------------
Imie: Krzysiek
Nazwisko: Onar
Numer indeksu: 0
Nazwa specjalnosci : Bezpieczenstwo wewnetrzne
Rok studiow : 0
0

A jakie jest pytanie?

1

Wyświetl podpowiedź i odczytaj dane.

...
      int numer_albumu = scan.nextInt();
 
      Student student1 = new Student(imie,nazwisko,numer_albumu,"Informatyka niestacjonarne",1);
      student1.PokazDane();
 
      System.out.println("--------------------------");
      System.out.println("Podaj imie i nazwisko: ");
      imie = scan.next();
      nazwisko = scan.next(); 
      Student student2 = new Student(imie, nazwisko);
      student2.PokazDane();
...
1

Mam pewien pomysł na rozwiązanie tego zadania, ale z użyciem listy i nie wiem czy w związku z tym nie wykraczam po za materiał jaki miałeś do tej pory, ale wrzucę, może da to tobie pomysł jak uprościć to co napisałem.

Klasa główna Studia:

package studia;
 
import java.util.ArrayList;
import java.util.Scanner;
 
public class Studia {
    public static void main(String[] args) {
        ArrayList lista = new ArrayList<Student>();
        Scanner scan = new Scanner(System.in);
        int opcja;
        
        do{
            
            System.out.println("1. Wprowadz dane studenta. 2. Pokaż listę studentów. 3.Wyjście.");
            opcja =scan.nextInt();
            
        switch(opcja){
            case 1:{
                String imie;
                String nazwisko;
                int numer_indeksu;
                String nazwa_specjalnosci;
                int rok_studiow;
                
                Student st = new Student();
                
                System.out.print("Podaj imię: ");
                imie = scan.next();
                st.setImie(imie);
                System.out.print("Podaj nazwisko: ");
                nazwisko = scan.next();
                st.setNazwisko(nazwisko);
                System.out.print("Podaj numer indeksu: ");
                numer_indeksu = scan.nextInt();
                st.setNumer_indeksu(numer_indeksu);
                System.out.print("Podaj nazwę specjalizacji: ");
                nazwa_specjalnosci = scan.next();
                st.setNazwa_specjalnosci(nazwa_specjalnosci);
                System.out.print("Podaj rok studiów: ");
                rok_studiow = scan.nextInt();
                st.setRok_studiow(rok_studiow);
                
                lista.add(st);
            }
            break;
            case 2:{
                    for (int i = 0; i < lista.size(); i++) {
                        System.out.print((i + 1) + ". ");
                        System.out.println(lista.get(i));
                    }
            }
            break;
            case 3:{
                
            }
            break;
            default:{
                        System.out.println("Nie ma takiej opcji!");
            }
        }
        }while(opcja !=3);
        }
}

Klasa Student:

package studia;
public class Student {
    String imie;  // pola klasy 
    String nazwisko;
    int numer_indeksu;
    String nazwa_specjalnosci;
    int rok_studiow;
 
    public Student(){
        
    }
    
    public Student(String imie, String nazwisko, int numer_indeksu, String nazwa_specjalnosci, int rok_studiow){ // konstruktor I
    this.imie = imie;
    this.nazwisko = nazwisko;
    this.numer_indeksu = numer_indeksu;
    this.nazwa_specjalnosci= nazwa_specjalnosci;
    this.rok_studiow = rok_studiow;
    }
 
    public Student(String imie, String nazwisko){ // konstruktor II
    this.imie = imie;
    this.nazwisko = nazwisko;
 
    }
 
    public Student(int numer_indeksu){     // konstruktor III
    this.numer_indeksu = numer_indeksu;
    } 
    public Student(String imie, String nazwisko, String nazwa_specjalnosc){  // konstruktor IV
    this.imie= imie;
    this.nazwa_specjalnosci = nazwa_specjalnosc;
    this.nazwisko = nazwisko;
    }

    public void setImie(String imie) {
        this.imie = imie;
    }

    public void setNazwisko(String nazwisko) {
        this.nazwisko = nazwisko;
    }

    public void setNumer_indeksu(int numer_indeksu) {
        this.numer_indeksu = numer_indeksu;
    }

    public void setNazwa_specjalnosci(String nazwa_specjalnosci) {
        this.nazwa_specjalnosci = nazwa_specjalnosci;
    }

    public void setRok_studiow(int rok_studiow) {
        this.rok_studiow = rok_studiow;
    }

    public String getImie() {
        return imie;
    }

    public String getNazwisko() {
        return nazwisko;
    }

    public int getNumer_indeksu() {
        return numer_indeksu;
    }

    public String getNazwa_specjalnosci() {
        return nazwa_specjalnosci;
    }

    public int getRok_studiow() {
        return rok_studiow;
    }
    
    @Override
    public String toString(){
        return "Imię: " + imie + ", Nazwisko: " + nazwisko + ", Numer indeksu: " + numer_indeksu + 
                ", Nazwa specjalności: " + nazwa_specjalnosci + ", Rok studiów: " + rok_studiow;
    }
}

Dodam, że mój pomysł wymagał dodania geterów i seterów oraz domyślnego konstruktora.

Na pewno nie jest to kompletny program ponieważ warto by dodać obsługę wyjątków (ponieważ jak jako opcję wpiszemy literkę to program się psuje), a także usuwanie studentów z listy, ale może pomoże w rozwiązaniu zadania.

0

Klasa główna Studia:

package studia;
 
import java.util.ArrayList;
import java.util.Scanner;
 
public class Studia {
    public static void main(String[] args) {
        ArrayList lista = new ArrayList<Student>();
        Scanner scan = new Scanner(System.in);
        int opcja;
        
        do{
            
            System.out.println("1. Wprowadz dane studenta. 2. Pokaż listę studentów. 3.Wyjście.");
            opcja =scan.nextInt();
            
        switch(opcja){
            case 1:{
                String imie;
                String nazwisko;
                int numer_indeksu;
                String nazwa_specjalnosci;
                int rok_studiow;
                
                Student st = new Student();
                
                System.out.print("Podaj imię: ");
                imie = scan.next();
                st.setImie(imie);
                System.out.print("Podaj nazwisko: ");
                nazwisko = scan.next();
                st.setNazwisko(nazwisko);
                System.out.print("Podaj numer indeksu: ");
                numer_indeksu = scan.nextInt();
                st.setNumer_indeksu(numer_indeksu);
                System.out.print("Podaj nazwę specjalizacji: ");
                nazwa_specjalnosci = scan.next();
                st.setNazwa_specjalnosci(nazwa_specjalnosci);
                System.out.print("Podaj rok studiów: ");
                rok_studiow = scan.nextInt();
                st.setRok_studiow(rok_studiow);
                
                lista.add(st);
            }
            break;
            case 2:{
                    for (int i = 0; i < lista.size(); i++) {
                        System.out.print((i + 1) + ". ");
                        System.out.println(lista.get(i));
                    }
            }
            break;
            case 3:{
                
            }
            break;
            default:{
                        System.out.println("Nie ma takiej opcji!");
            }
        }
        }while(opcja !=3);
        }
}

Klasa Student:

package studia;
public class Student {
    String imie;  // pola klasy 
    String nazwisko;
    int numer_indeksu;
    String nazwa_specjalnosci;
    int rok_studiow;
 
    public Student(){
        
    }
    
    public Student(String imie, String nazwisko, int numer_indeksu, String nazwa_specjalnosci, int rok_studiow){ // konstruktor I
    this.imie = imie;
    this.nazwisko = nazwisko;
    this.numer_indeksu = numer_indeksu;
    this.nazwa_specjalnosci= nazwa_specjalnosci;
    this.rok_studiow = rok_studiow;
    }
 
    public Student(String imie, String nazwisko){ // konstruktor II
    this.imie = imie;
    this.nazwisko = nazwisko;
 
    }
 
    public Student(int numer_indeksu){     // konstruktor III
    this.numer_indeksu = numer_indeksu;
    } 
    public Student(String imie, String nazwisko, String nazwa_specjalnosc){  // konstruktor IV
    this.imie= imie;
    this.nazwa_specjalnosci = nazwa_specjalnosc;
    this.nazwisko = nazwisko;
    }

    public void setImie(String imie) {
        this.imie = imie;
    }

    public void setNazwisko(String nazwisko) {
        this.nazwisko = nazwisko;
    }

    public void setNumer_indeksu(int numer_indeksu) {
        this.numer_indeksu = numer_indeksu;
    }

    public void setNazwa_specjalnosci(String nazwa_specjalnosci) {
        this.nazwa_specjalnosci = nazwa_specjalnosci;
    }

    public void setRok_studiow(int rok_studiow) {
        this.rok_studiow = rok_studiow;
    }

    public String getImie() {
        return imie;
    }

    public String getNazwisko() {
        return nazwisko;
    }

    public int getNumer_indeksu() {
        return numer_indeksu;
    }

    public String getNazwa_specjalnosci() {
        return nazwa_specjalnosci;
    }

    public int getRok_studiow() {
        return rok_studiow;
    }
    
    @Override
    public String toString(){
        return "Imię: " + imie + ", Nazwisko: " + nazwisko + ", Numer indeksu: " + numer_indeksu + 
                ", Nazwa specjalności: " + nazwa_specjalnosci + ", Rok studiów: " + rok_studiow;
    }
}

Cześc,
sorry, ze odkopuje temat, ale mam kilka pytań :)

            String imie;
            String nazwisko;
            int numer_indeksu;
            String nazwa_specjalnosci;
            int rok_studiow;
            
            Student st = new Student();

Dlaczego to musi być w case 1?
Jeżeli jest w klasie Studia pod zmienna int opcja to np. jak wprowadzimy 3 studentow to pokaze dane wszystkie takie same (3-go studenta). Dlaczego?

public Student(){
    
}

Dlaczego w klasie student musi byc konstruktor bez parametrów?

@Override
public String toString(){
    return "Imię: " + imie + ", Nazwisko: " + nazwisko + ", Numer indeksu: " + numer_indeksu + 
            ", Nazwa specjalności: " + nazwa_specjalnosci + ", Rok studiów: " + rok_studiow;
}

Zamienia wszystko na Stringi? Nie ma do tego żadnego odwołania, skąd program wie, podczas wyswietlania tego ?

Get'y i set'y słuza do przechowywania obiektow w pamieci tak?

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