-1

I've decided to programm a search system for finding students and teachers in a school via GUI. It is an OOP and need some tweaking here and there, but there is one issue which doesn't seem logical to me. When I'm searching for a teacher, I have to type there name or surname into a JTextField and press the Search button which runs a method that loops through an ArrayList of teacher-objects and checks if their names match with the one in the Textfield. Then it checks if these teachers have multiple subjects and grades and it goes through nested if-statements. After the teacher is found, their information is displayed on a GUI with several Texfields. Theoretically if the name I typed into the TextField doesn't match one from the teacher objects, a Error Message should pop-up saying the teacher I'm looking for isn't in the system. But even though I type in the correct name and get all the information displayed, it sends me to the Error Message everytime. I tried to fix it with a break statement but that didn't work either. Can someone please help me with this. Here is the code I'm talking about:

    public void lehrerSuche() 
{
    String lehrername = tfSuchfeldLehrer.getText();
    for(int i = 0; i < td.getFachliste(0).getListenLaengeLehrerListe();i++)
            {
                if(td.getFachliste(0).getLehrerliste(i).getName().equals(lehrername) || td.getFachliste(0).getLehrerliste(i).getNachname().equals(lehrername))
                {
                    if(td.getFachliste(0).getLehrerliste(i).isMehrerefaecher() && td.getFachliste(0).getLehrerliste(i).isMehrereklassen())
                    {
                        tfNameLehrer.setText(td.getFachliste(0).getLehrerliste(i).getName() + " " + td.getFachliste(0).getLehrerliste(i).getNachname());
                        tfKürzelLehrer.setText(td.getFachliste(0).getLehrerliste(i).getKuerzel() + ".");
                        tfKlasse_1Lehrer.setText(td.getFachliste(0).getLehrerliste(i).getKlasse().getBezeichnung());
                        tfKlasse_2Lehrer.setText(td.getFachliste(0).getLehrerliste(i).getKlass2().getBezeichnung());
                        tfFach_1Lehrer.setText(td.getFachliste(0).getLehrerliste(i).getFach().getFachbezeichnung());
                        tfFach_2Lehrer.setText(td.getFachliste(0).getLehrerliste(i).getFach2().getFachbezeichnung());

                    }
                    if(td.getFachliste(0).getLehrerliste(i).isMehrerefaecher() == false && td.getFachliste(0).getLehrerliste(i).isMehrereklassen())
                    {
                        tfNameLehrer.setText(td.getFachliste(0).getLehrerliste(i).getName() + " " + td.getFachliste(0).getLehrerliste(i).getNachname());
                        tfKürzelLehrer.setText(td.getFachliste(0).getLehrerliste(i).getKuerzel() + ".");
                        tfKlasse_1Lehrer.setText(td.getFachliste(0).getLehrerliste(i).getKlasse().getBezeichnung());
                        tfKlasse_2Lehrer.setText(td.getFachliste(0).getLehrerliste(i).getKlass2().getBezeichnung());
                        tfFach_1Lehrer.setText(td.getFachliste(0).getLehrerliste(i).getFach().getFachbezeichnung());
                    }
                    if(td.getFachliste(0).getLehrerliste(i).isMehrerefaecher() && td.getFachliste(0).getLehrerliste(i).isMehrereklassen()==false)
                    {
                        tfNameLehrer.setText(td.getFachliste(0).getLehrerliste(i).getName() + " " + td.getFachliste(0).getLehrerliste(i).getNachname());
                        tfKürzelLehrer.setText(td.getFachliste(0).getLehrerliste(i).getKuerzel() + ".");
                        tfKlasse_1Lehrer.setText(td.getFachliste(0).getLehrerliste(i).getKlasse().getBezeichnung());
                        tfFach_1Lehrer.setText(td.getFachliste(0).getLehrerliste(i).getFach().getFachbezeichnung());
                        tfFach_2Lehrer.setText(td.getFachliste(0).getLehrerliste(i).getFach2().getFachbezeichnung());
                    }
                    if(td.getFachliste(0).getLehrerliste(i).isMehrerefaecher() == false && td.getFachliste(0).getLehrerliste(i).isMehrereklassen()==false)
                    {
                        tfNameLehrer.setText(td.getFachliste(0).getLehrerliste(i).getName() + " " + td.getFachliste(0).getLehrerliste(i).getNachname());
                        tfKürzelLehrer.setText(td.getFachliste(0).getLehrerliste(i).getKuerzel() + ".");
                        tfKlasse_1Lehrer.setText(td.getFachliste(0).getLehrerliste(i).getKlasse().getBezeichnung());
                        tfFach_1Lehrer.setText(td.getFachliste(0).getLehrerliste(i).getFach().getFachbezeichnung());
                    }
                    break;
                }
                else
                {
                    switchPanels_3(panelErrorLehrer);
                }
            }
}

I've uploaded my project to GitHub. Methods and variables are written in German, so I'm really sorry if you can't understand what I have written. If u have questions please hit me up. I use Eclipse to code. This link should direct you to my GitHub: https://github.com/Gonzo-CR/Home-Projects.git If the link doesn't work, look for Gonzo-CR on GitHub and check out my Home-projects repository where I uploaded all the files. For better undestanding these are the Object oriented classes:

  • Person(Abstract)
  • Schueler
  • Lehrer
  • Fach
  • Schulklasse
  • Spezial
  • Sprecher GUI classes:
  • Suchsystem
  • Testdaten(A class which generates all my objects)
  • At the very least, start by not having `td.getFachliste(0).getListenLaengeLehrerListe()` _everywhere_. Before your loop, say `List list = td.getFachliste(0).getListenLaengeLehrerListe()` (with as appropriate a type as needed, you're not showing what it is so I can't tell you which to use), and then use _that_ variable everywhere in the subsequent code. Right now, it's barely readable because it's a wall of identical text that is so long it runs past the post width. – Mike 'Pomax' Kamermans Mar 14 '20 at 18:55
  • So you mean the information is displayed and the error message is also displayed? both? – Rans Mar 14 '20 at 19:01

1 Answers1

0

The problem is likely that if td.getFachliste(0).getLehrerliste(i).getName().equals(lehrername) is not true the very first time the loop runs, switchPanels_3(panelErrorLehrer); will be triggered - regardless of whether the condition is met on a later iteration of the loop.

What you need is to check a sentinel value after the loop finishes - e.g.:

bool lehrerGefunden = false;
for(int i = 0; i < td.getFachliste(0).getListenLaengeLehrerListe();i++){
    if(td.getFachliste(0).getLehrerliste(i).getName().equals(lehrername) || td.getFachliste(0).getLehrerliste(i).getNachname().equals(lehrername)){
        //etc.
        lehrerGefunden = true;
        break;
    }
}
if(!lehrerGefunden){
    switchPanels_3(panelErrorLehrer);
}

That way, you check every entry in the list before deciding whether to show the error.

cmhoequist
  • 66
  • 5
  • Thank you very much, it is now working porperly. I didn't think of an boolean variable at all. I'm gonna remember that for the future. Thanks again. – Gonzalo CR Mar 14 '20 at 21:00