循环和条件不起作用

时间:2013-11-20 16:42:28

标签: java loops while-loop conditional-statements

用户输入一个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());
}

1 个答案:

答案 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)) {

除非你确实有一个正则表达式的列表,无论出于什么原因,我想这是正则表达式。