For 循环遍历对象的 ArrayList 并检查它们的名称以在 GUI 中显示它们,但错误消息仍然显示
For loop runs through an ArrayList of objects and checks their names to display them in GUI but Error Message still shows up
我决定编写一个搜索系统,用于通过 GUI 查找学校的学生和教师。这是一个 OOP,需要在这里和那里进行一些调整,但有一个问题对我来说似乎不合逻辑。当我在寻找老师时,我必须在 JTextField 中输入名字或姓氏,然后按下搜索按钮,该按钮运行一个循环遍历教师对象 ArrayList 的方法,并检查他们的名字是否与文本字段中的名字匹配.然后它检查这些老师是否有多个科目和成绩,并通过嵌套的 if 语句。找到老师后,他们的信息将显示在带有多个 Texfields 的 GUI 上。理论上,如果我在 TextField 中输入的姓名与教师对象中的姓名不匹配,则会弹出一条错误消息,提示我要查找的教师不在系统中。但是,即使我输入了正确的名称并显示了所有信息,它每次都会将我发送到错误消息。我试图用 break 语句来修复它,但这也不起作用。有人可以帮我解决这个问题吗?
这是我正在谈论的代码:
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);
}
}
}
我已经将我的项目上传到 GitHub。方法和变量是用德语写的,所以如果你不能理解我写的东西,我真的很抱歉。如果您有任何疑问,请联系我。我使用 Eclipse 来编写代码。
此 link 应将您引导至我的 GitHub:
https://github.com/Gonzo-CR/Home-Projects.git
如果 link 不起作用,请在 GitHub 上查找 Gonzo-CR 并查看我上传所有文件的 Home-projects 存储库。
为了更好地理解这些是面向对象的 classes:
- 人物(摘要)
- 舒勒
- 教师
- 法赫
- Schulklasse
- 特别
- 演讲者
GUI classes:
- 这样的系统
- Testdaten(生成我所有对象的class)
问题很可能是,如果 td.getFachliste(0).getLehrerliste(i).getName().equals(lehrername)
不成立 循环第一次运行时 ,switchPanels_3(panelErrorLehrer);
将被触发 - 无论是否在循环的后续迭代中满足条件。
您需要的是在循环结束后检查标记值 - 例如:
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);
}
这样,您可以在决定是否显示错误之前检查列表中的每个条目。
我决定编写一个搜索系统,用于通过 GUI 查找学校的学生和教师。这是一个 OOP,需要在这里和那里进行一些调整,但有一个问题对我来说似乎不合逻辑。当我在寻找老师时,我必须在 JTextField 中输入名字或姓氏,然后按下搜索按钮,该按钮运行一个循环遍历教师对象 ArrayList 的方法,并检查他们的名字是否与文本字段中的名字匹配.然后它检查这些老师是否有多个科目和成绩,并通过嵌套的 if 语句。找到老师后,他们的信息将显示在带有多个 Texfields 的 GUI 上。理论上,如果我在 TextField 中输入的姓名与教师对象中的姓名不匹配,则会弹出一条错误消息,提示我要查找的教师不在系统中。但是,即使我输入了正确的名称并显示了所有信息,它每次都会将我发送到错误消息。我试图用 break 语句来修复它,但这也不起作用。有人可以帮我解决这个问题吗? 这是我正在谈论的代码:
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);
}
}
}
我已经将我的项目上传到 GitHub。方法和变量是用德语写的,所以如果你不能理解我写的东西,我真的很抱歉。如果您有任何疑问,请联系我。我使用 Eclipse 来编写代码。 此 link 应将您引导至我的 GitHub: https://github.com/Gonzo-CR/Home-Projects.git 如果 link 不起作用,请在 GitHub 上查找 Gonzo-CR 并查看我上传所有文件的 Home-projects 存储库。 为了更好地理解这些是面向对象的 classes:
- 人物(摘要)
- 舒勒
- 教师
- 法赫
- Schulklasse
- 特别
- 演讲者 GUI classes:
- 这样的系统
- Testdaten(生成我所有对象的class)
问题很可能是,如果 td.getFachliste(0).getLehrerliste(i).getName().equals(lehrername)
不成立 循环第一次运行时 ,switchPanels_3(panelErrorLehrer);
将被触发 - 无论是否在循环的后续迭代中满足条件。
您需要的是在循环结束后检查标记值 - 例如:
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);
}
这样,您可以在决定是否显示错误之前检查列表中的每个条目。