vendredi 28 février 2020

Nested if-statements get very long and hard to overview what is actually wrong

This is the continuation of the project from my last question. Its basically a program that return console messages by recieving user-input with a scanner. It's a school programm that has a class creating grades with ArrayLists that store the students in their respective grade. Some students can also be class speaker or student speaker which are also stored in their own ArrayLists. The program asks the user to enter a category which leads to the coresponding path through nested if-statements. If the if-statements dont get fulfilled an error message shows up on the console and loops back to the beginning.

The way I set up the program the nested if statements should work, but its still causing problems and I dont know what to do.

I'm from Germany, so I'm sorry for some German words in the programm.

This is the code:

    package package_Fachklassen;

    import java.util.Scanner;

    public class Startklasse {

public static void main(String[] args) {
    // TODO Auto-generated method stub

    Schulklasse sk1, sk2;
    sk1 = new Schulklasse("WG 13-1");
    sk2 = new Schulklasse("WG 13-2");

    Sprecher ks1, sss1;
    ks1 = new Sprecher("Klassensprecher");
    sss1 = new Sprecher("Schülersprecher");

    Spezial kS1, kS2, kS3, kS4, sS1, sS2;
    kS1 = new Spezial("Cem", "Yildiz", 19, sk2, ks1);
    kS2 = new Spezial("Fatima", "Baba", 19, sk2, ks1);
    kS3 = new Spezial("Rüveyda", "Yildiz", 20, sk1, ks1);
    kS4 = new Spezial("Zvoni", "Jogovic", 19, sk1, ks1);
    sS1 = new Spezial("Cem", "Yildiz", 19, sk2, sss1);
    sS2 = new Spezial("Fatima", "Baba", 19, sk2, sss1);

    ks1.addKlassensprecher(kS1);
    ks1.addKlassensprecher(kS2);
    ks1.addKlassensprecher(kS3);
    ks1.addKlassensprecher(kS4);
    sss1.addSchuelersprecher(sS1);
    sss1.addSchuelersprecher(sS2);


    //Klasse 13-1

    Schueler s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15, s16, s17, s18, s19, s20;
    s1 = new Schueler("Gonzalo", "Cofre Real", 18, sk1);
    s2 = new Schueler("Swaastika", "Yogeswaran", 19, sk1);
    s3 = new Schueler("Derin", "Sipahi", 19, sk1);
    s4 = new Schueler("Henry", "Reinhold", 19, sk1);
    s5 = new Schueler("Sara", "Perkovic", 19, sk1);
    s6 = new Schueler("Honia", "Aref", 19, sk1);
    s7 = new Schueler("Finn", "Bolheimer", 17, sk1);
    s8 = new Schueler("Karoline", "Garkos", 18, sk1);
    s9 = new Schueler("Hannah", "Hirth", 18, sk1);
    s10 = new Schueler("Sarah", "Schwarz", 18, sk1);
    s11 = new Schueler("Rüveyda", "Yildiz", 20, sk1);
    s12 = new Schueler("Jibi", "Saji", 18, sk1);
    s13 = new Schueler("Rida", "Jafari", 18, sk1);
    s14 = new Schueler("Patrick", "Bruhn", 18, sk1);
    s15 = new Schueler("Andre", "Rosenau", 19, sk1);
    s16 = new Schueler("Irini", "Chrisivolanto", 19, sk1);
    s17 = new Schueler("Xenia", "Aschenbrenner", 19, sk1);
    s18 = new Schueler("Kristina", "Jokic", 19, sk1);
    s19 = new Schueler("Yavuz", "Salik", 21, sk1);
    s20 = new Schueler("Zvonimir", "Jogovic", 19, sk1);


    sk1.addSchueler(s1);
    sk1.addSchueler(s2);
    sk1.addSchueler(s3);
    sk1.addSchueler(s4);
    sk1.addSchueler(s5);
    sk1.addSchueler(s6);
    sk1.addSchueler(s7);
    sk1.addSchueler(s8);
    sk1.addSchueler(s9);
    sk1.addSchueler(s10);

    //Klasse 13-2

    Schueler ss1, ss2, ss3, ss4, ss5, ss6, ss7, ss8;
    ss1 = new Schueler("Cem", "Yildiz", 19, sk2);
    ss2 = new Schueler("Fathima", "Baba", 19, sk2);
    ss3 = new Schueler("Sanjie", "Bislimi", 19, sk2);
    ss4 = new Schueler("Jasmine", "Jaffari", 19, sk2);
    ss5 = new Schueler("Hannah", "Arent", 19, sk2);
    ss6 = new Schueler("Niklas", "Genf", 18, sk2);
    ss7 = new Schueler("Celina", "Musollaj", 18, sk2);
    ss8 = new Schueler("Naomi", "Schmidt", 19, sk2);

    sk2.addSchueler(ss1);
    sk2.addSchueler(ss2);
    sk2.addSchueler(ss3);
    sk2.addSchueler(ss4);
    sk2.addSchueler(ss5);
    sk2.addSchueler(ss6);

    String schueler = "Schüler";
    String sprecher = "Sprecher";


    String ksSuche = "KS-Suche";
    String ssSuche = "SS-Suche";
    String ksAlle = "KS-Alle";
    String ssAlle = "SS-Alle";

    while(true) 
    {   
        Scanner firstscan = new Scanner(System.in);
        System.out.println("Nach welcher Kategorie suchen Sie?");
        String f_input = firstscan.nextLine();
        boolean studentmissing = true;
            if(f_input.equals(schueler)) 
            {
                Scanner scan = new Scanner(System.in);
                System.out.println("Welche Klasse besucht der gesuchte Schüler?");
                String k_input= scan.nextLine();

                    if(k_input.equals(sk1.getBezeichnung())) 
                    {
                        System.out.println("Welchen SChüler aus Klasse 13-1 suchen Sie?");
                        String n_input = scan.nextLine();
                        for(int i = 0; i < sk1.getListenLaenge(); i++) 
                        {
                            if(n_input.equals(sk1.getSchueler(i).getName()) || n_input.equals(sk1.getSchueler(i).getNachname())) 
                            {
                                studentmissing = false;
                                System.out.println("Ihr Schüler:");
                                System.out.println(" " + sk1.getSchueler(i).getName());
                                System.out.println(" " + sk1.getSchueler(i).getNachname());
                                System.out.println(" " + sk1.getSchueler(i).getAlter());
                                break;
                            }
                        }
                        if(studentmissing) 
                        {
                        System.out.println("Schüler existiert nicht oder ist nicht in dieser Klasse!");
                        System.out.println("--------------------------------------------------------");
                        }

                    }
                    else if(k_input.equals(sk2.getBezeichnung())) 
                    {
                        System.out.println("Welchen Schüler aus Klasse 13-2 suchen Sie?");
                        String n2_input = scan.nextLine();
                        for(int i = 0; i < sk1.getListenLaenge(); i++)
                        {
                            if(n2_input.equals(sk2.getSchueler(i).getName()) || n2_input.equals(sk2.getSchueler(i).getNachname()))
                            {
                                studentmissing = false;
                                System.out.println("Ihr Schüler:");
                                System.out.println(" " + sk2.getSchueler(i).getName());
                                System.out.println(" " + sk2.getSchueler(i).getNachname());
                                System.out.println(" " + sk2.getSchueler(i).getAlter());
                                break;
                            }
                        }
                        if(studentmissing) 
                        {
                            System.out.println("Schüler existiert nicht oder ist nicht in dieser Klasse!");
                            System.out.println("--------------------------------------------------------");
                        }
                    }
                }

                else if(f_input.equals(sprecher))
                {
                    Scanner ksScanner = new Scanner(System.in);
                    System.out.println("Suchen Sie nach Klassensprechern oder Schülersprechern?");
                    String ks_input = ksScanner.nextLine();

                    if(ks_input.equals(ksSuche))
                    {
                        System.out.println("Geben sie den Namen der gesuchten Person ein!");
                        String sn_input = firstscan.nextLine();
                        boolean ksMissing = true;
                        for(int i = 0; i < ks1.getListLengthKS(); i++)
                        {
                            if(sn_input.equals(ks1.getKlassensprecher(i).getName()) || sn_input.equals(ks1.getKlassensprecher(i).getNachname()))
                            {
                                ksMissing = false;
                                System.out.println("Ihr Schüler:");
                                System.out.println(" " + ks1.getKlassensprecher(i).getName());
                                System.out.println(" " + ks1.getKlassensprecher(i).getNachname());
                                System.out.println(" " + ks1.getKlassensprecher(i).getAlter());
                                break;
                            }
                        }
                        if(ksMissing) 
                        {
                                System.out.println("Schüler ist nicht gespeichert!");
                                System.out.println("-------------------------------------------------");
                        }
                    }
                }
                else if(f_input.equals(ssSuche))
                {
                    System.out.println("Geben sie den Namen des Schülersprechers ein!");
                    String ss_Input = firstscan.nextLine();
                    boolean ssMissing = true;
                    for(int i = 0; i < sss1.getListLengthSS(); i++) 
                    {       
                        if(ss_Input.equals(sss1.getSchuelersprecher(i).getName()) || ss_Input.equals(sss1.getSchuelersprecher(i).getNachname()))
                        {
                            ssMissing = false;
                            System.out.println("Ihr Schüler:");
                            System.out.println(" " + sss1.getSchuelersprecher(i).getName());
                            System.out.println(" " + sss1.getSchuelersprecher(i).getNachname());
                            System.out.println(" " + sss1.getSchuelersprecher(i).getAlter());
                            break;
                        }

                    }
                    if(ssMissing) 
                    {
                        System.out.println("Schüler ist nicht gespeichert!");
                        System.out.println("-------------------------------------------------");
                    }
                }
                else if(f_input.equals(ksAlle)) 
                {
                    ks1.showKlassensprecher();
                }
                else if(f_input.equals(ssAlle))
                {
                    sss1.showSchuelersprecher();
                }
            }

    }           
}

Most of the function get executed. Problems appear with the case of a value that doesnt fulfill the condition. And every function from "else if(f_input.equals(ssSuche))" just jumps back to the beginning.

These are some examples from the console in the case of student search:

    Nach welcher Kategorie suchen Sie?
    Schüler
    Welche Klasse besucht der gesuchte Schüler?
    WG 13-1
    Welchen SChüler aus Klasse 13-1 suchen Sie?
    Derin
    Ihr Schüler:
    Derin
    Sipahi
    19
    Nach welcher Kategorie suchen Sie?
    Schüler
    Welche Klasse besucht der gesuchte Schüler?
    WG 13-1
    Welchen SChüler aus Klasse 13-1 suchen Sie?
    Cem
    Schüler existiert nicht oder ist nicht in dieser Klasse!
    --------------------------------------------------------
    Nach welcher Kategorie suchen Sie?
    Schüler
    Welche Klasse besucht der gesuchte Schüler?
    WG 13-2
    Welchen Schüler aus Klasse 13-2 suchen Sie?
    Cem
    Ihr Schüler:
    Cem
    Yildiz
    19
    Nach welcher Kategorie suchen Sie?
    Schüler
    Welche Klasse besucht der gesuchte Schüler? 
    WG 13-2
    Welchen Schüler aus Klasse 13-2 suchen Sie? 
    Derin
    Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 6, Size: 6
         at java.util.ArrayList.rangeCheck(Unknown Source)
         at java.util.ArrayList.get(Unknown Source)
         at package_Fachklassen.Schulklasse.getSchueler(Schulklasse.java:27)
         at package_Fachklassen.Startklasse.main(Startklasse.java:144)

This is a example of the other console output:

    Nach welcher Kategorie suchen Sie?
    Sprecher
    Suchen Sie nach Klassensprechern oder Schülersprechern?
    KS-Suche
    Geben sie den Namen der gesuchten Person ein!
    Cem
    Ihr Schüler:
     Cem
     Yildiz
     19
    Nach welcher Kategorie suchen Sie?
    Sprecher
    Suchen Sie nach Klassensprechern oder Schülersprechern?
    KS-Suche
    Geben sie den Namen der gesuchten Person ein!
    Derin
    Schüler ist nicht gespeichert!
    -------------------------------------------------
    Nach welcher Kategorie suchen Sie?
    Sprecher
    Suchen Sie nach Klassensprechern oder Schülersprechern?
    SS-Suche
    Nach welcher Kategorie suchen Sie?
    Sprecher
    Suchen Sie nach Klassensprechern oder Schülersprechern?
    KS-Alle
    Nach welcher Kategorie suchen Sie?
    Sprecher
    Suchen Sie nach Klassensprechern oder Schülersprechern?
    SS-Alle
    Nach welcher Kategorie suchen Sie?

Aucun commentaire:

Enregistrer un commentaire