用户输入一个ID,如果它存在,则应显示它已存在并再次循环回到inout部分。但由于某种原因,它不这样做。在它结束时,我有代码写入一个文件执行甚至我有一个条件,因为它没有。我尝试了几件事,不知道为什么它不会工作。
JTextField aaField = new JTextField(5);
JTextField bbField = new JTextField(10);
JTextField ccField = new JTextField(10);
JTextField ddField = new JTextField(10);
JTextField eeField = new JTextField(5);
JTextField ffField = new JTextField(5);
boolean done = false;
while(done == false) {
JPanel myPanel1 = new JPanel();
myPanel1.add(new JLabel("ID:"));
myPanel1.add(aaField);
myPanel1.add(Box.createVerticalStrut(5));
myPanel1.add(new JLabel("Name:"));
myPanel1.add(bbField);
myPanel1.add(Box.createHorizontalStrut(5));
myPanel1.add(new JLabel("Address:"));
myPanel1.add(ccField); // a spacer
myPanel1.add(Box.createHorizontalStrut(10));
myPanel1.add(new JLabel("Email:"));
myPanel1.add(ddField);
myPanel1.add(Box.createVerticalStrut(10));
myPanel1.add(new JLabel("Password:"));
myPanel1.add(eeField); // a spacer
myPanel1.add(Box.createVerticalStrut(10));
myPanel1.add(new JLabel("dob:"));
myPanel1.add(ffField); // a spacer
result1 = JOptionPane.showConfirmDialog(null, myPanel1,
"Please Enter Values", JOptionPane.OK_CANCEL_OPTION);
for(int xx = 0; xx< course.size();xx++) {
ch = course.get(xx).getId();
if(aaField.getText().matches(ch)) {
JOptionPane.showMessageDialog(null,"Please enter an ID that doesnt already exist.");
}
if(!(aaField.getText().matches(ch))) {
done = true;
}
}
}
if(done == true && !(aaField.getText().matches(ch))&& result1 ==JOptionPane.OK_OPTION) {
Mate a = new Mate();
a.addMate(aaField.getText(),bbField.getText(),ccField.getText(),ddField.getText(),eeField.getText(),ffField.getText());
}
答案 0 :(得分:1)
“......我有一个条件,因为它没有。”它看起来像你做,但你基本上没有。
for(int xx = 0; xx< course.size();xx++) {
ch = course.get(xx).getId();
if(aaField.getText().matches(ch)) {
JOptionPane.showMessageDialog(null,"Please enter an ID that doesnt already exist.");
}
if(!(aaField.getText().matches(ch))) {
done = true;
}
}
我认为course
是某种列表,您从中获取某种现有值。如果您检查此代码,您会发现如果课程中的任何值与不匹配,done
将始终为真。
我认为你想要的基本上是这种有些逆转的结构:
boolean done = true;
do {
// your giant block
for (int i = 0; i < course.size(); i++) {
if (aaField.getText().matches(course.get(i).getId())) {
JOptionPane.showMessageDialog(null, "Entry cannot be a duplicate.");
done = false;
break;
}
}
} while (!done);
作为旁注,你的代码很乱。如果您是初学者,但是您需要继续工作,这是可以的。对于初学者,不要在循环内创建GUI组件。
此外,您使用matches方法,我怀疑您有regular expressions的列表,因此您可能希望使用方法equals:
if (aaField.getText().equals(ch)) {
除非你确实有一个正则表达式的列表,无论出于什么原因,我想这是正则表达式。