Java项目:通过或失败的学生人数?逻辑错误

时间:2015-10-10 09:03:15

标签: java

因此,此代码要求为10名学生输入1表示通过或2表示失败,如果用户输入无效数字则显示错误。这里的逻辑错误是例如所有10个学生都通过,输出应该是“通过:10失败:0”。但是,如果我错误输入一次错误,将出现错误信息,但输出将是“通过:9失败:0“甚至认为所有10名学生都通过了。

import javax.swing.JOptionPane;

public class pass {

    public static void main(String[] args) {
        int passes = 0;
        int failures = 0;
        int result;

        for (int studentCounter = 1; studentCounter <= 10; studentCounter++) {
            String input = JOptionPane.showInputDialog("Enter (1=pass, 2= fail)");
            result = Integer.parseInt(input);
            if (result == 1) {
                passes = passes + 1;
            } else if (result == 2) {
                failures = failures + 1;
            } else if ((result != 1) && (result != 2)) {
                JOptionPane.showMessageDialog(null, "Error input 1 or 2");

            }
        }

        JOptionPane.showMessageDialog(null, "Passed:" + passes + "Failed:" + failures);
        System.exit(0);

    }
}

5 个答案:

答案 0 :(得分:2)

这是正确的,因为9已经过去而0失败了。任何组都不会计入错误。

答案 1 :(得分:1)

您可以更新以下代码以删除逻辑错误:

import javax.swing.JOptionPane;
public class pass{
public static void main(String [] args){
int passes=0;
int failures=0;
int result;


for(int studentCounter = 1; studentCounter<=10;){
    String input = JOptionPane.showInputDialog("Enter (1=pass, 2= fail)");
    result = Integer.parseInt(input);
    if(result==1){
            passes = passes + 1;
            studentCounter++
    }else if(result==2){
            failures = failures +1;
            studentCounter++
    } else {
        JOptionPane.showMessageDialog(null,"Error input 1 or 2");

    }
}
    JOptionPane.showMessageDialog(null,"Passed:"+passes+"Failed:"+failures);
            System.exit(0);
}
}

答案 2 :(得分:1)

问题在于你的if else逻辑: 这个For循环会增加条件else if((result!=1)&&(result!=2))中的整数,这意味着,例如,如果你输入10或1或2以外的输入,你将获得0次传递和0次失败的结果。 ..但你的循环结束了......

我建议你另外使用Oracle Java Code Conventions ...失败++;通行证++;

答案 3 :(得分:1)

您可以尝试使用以下代码。在无效输入时减少学生反击。

import javax.swing.JOptionPane;
public class pass{
    public static void main(String [] args){
int passes=0;
int failures=0;
int result;

for(int studentCounter = 1; studentCounter<=10; studentCounter++){
    String input = JOptionPane.showInputDialog("Enter (1=pass, 2= fail)");
    result = Integer.parseInt(input);
    if(result==1){
            passes++;
    }else if(result==2){
            failures++;
    } else if((result!=1)&&(result!=2)) {
        studentCounter--;
        JOptionPane.showMessageDialog(null,"Error input 1 or 2");

    }
}

    JOptionPane.showMessageDialog(null,"Passed:"+passes+" Failed:"+failures);
            System.exit(0);
}
}

答案 4 :(得分:0)

循环执行10次。但是,如果发生错误,您的代码既不会增加passes也不会增加failures,因此passes + failures始终是没有失败的输入数量,并始终&lt; = 10。

如果你想得到10个结果,你必须确保正好有10个正确的输入。 您可以通过在正确输入上增加结果计数器直到达到10来实现此目的:

int studentCounter = 0;
while(studentCounter < 10 ){
    String input = JOptionPane.showInputDialog("Enter (1=pass, 2= fail)");
    result = Integer.parseInt(input);
    if(result==1){
            passes++;
            studentCounter++;
    }else if(result==2){
            failures++;
            studentCounter++;
    } else {
        JOptionPane.showMessageDialog(null,"Error input 1 or 2");
    }
}