【问题标题】:2nd dialog box won't run - Java第二个对话框不会运行 - Java
【发布时间】:2014-01-20 07:08:27
【问题描述】:

在这个程序中应该弹出 2 个对话框。一个告诉您输入“学生类型”(数字 1、2 或 3),第二个应该允许您输入学生成绩。

我运行它,只得到第一个对话框,它工作正常,我输入一个类型(1 到 3),应该得到一个显示成绩条目的第二个框。

为什么第二个盒子没有出现?它与我的第一个对话框的方法类型相同。使用第一个对话框后,我的程序退出。感谢您的帮助,我是 Java 初学者。

import javax.swing.JOptionPane;


public class Exercise4_8 {

    public static void main(String[] args) {

        final double ENGLISH_MIDTERM_PERCENTAGE = .25;
        final double ENGLISH_FINALEXAM_PERCENTAGE = .25;
        final double ENGLISH_RESEARCH_PERCENTAGE = .30;
        final double ENGLISH_PRESENTATION_PERCENTAGE = .20;

        final double MATH_MIDTERM_PERCENTAGE = .50;
        final double MATH_FINALEXAM_PERCENTAGE = .50;

        final double SCIENCE_MIDTERM_PERCENTAGE = .40;
        final double SCIENCE_FINALEXAM_PERCENTAGE = .40;
        final double SCIENCE_RESEARCH_PERCENTAGE = .20;


        int midterm = 0;
        int finalExamGrade = 0;
        int research = 0;
        int presentation = 0;
        double finalNumericGrade = 0;
        String finalLetterGrade = "";
        String response;
    //What type of student are we calculating?
        response = JOptionPane.showInputDialog("Enter student type (1=English, 2=Math, 3=Science)");

        if(response == null){
            JOptionPane.showMessageDialog(null, "You clicked on the Cancel button");

        }
        else if(response.equals("")){
            JOptionPane.showMessageDialog(null, "You must make an entry in the InputBox");

        }
        else if(Integer.parseInt(response) < 1 || Integer.parseInt(response) > 3) {
            JOptionPane.showMessageDialog(null, response + " - is not a valid student type");
            System.exit(0);

    //Student type is valid, now let's calculate grade
        switch(Integer.parseInt(response)){
    //Case 1 is an English Student
        case 1:
            midterm = Integer.parseInt(JOptionPane.showInputDialog("Enter the Midterm Grade"));
            finalExamGrade = Integer.parseInt(JOptionPane.showInputDialog("Enter the Final Examination Grade"));
            research = Integer.parseInt(JOptionPane.showInputDialog("Enter the Research Grade"));
            presentation = Integer.parseInt(JOptionPane.showInputDialog("Enter the Presentation Grade"));
            finalNumericGrade = (midterm * ENGLISH_MIDTERM_PERCENTAGE) + 
                    (finalExamGrade * ENGLISH_FINALEXAM_PERCENTAGE) + 
                    (research * ENGLISH_RESEARCH_PERCENTAGE) + 
                    (presentation * ENGLISH_PRESENTATION_PERCENTAGE);

        if(finalNumericGrade >=93)
            finalLetterGrade = "A";
        else 
            if((finalNumericGrade >= 85) && (finalNumericGrade < 93))
                finalLetterGrade = "B";
        else 
            if((finalNumericGrade >= 78) && (finalNumericGrade < 85))
                finalLetterGrade = "C";
        else 
            if((finalNumericGrade >= 70) && (finalNumericGrade < 78))
                finalLetterGrade = "D";
        else 
            if (finalNumericGrade < 70)
                finalLetterGrade = "F";

        JOptionPane.showMessageDialog(null, "***ENGLISH STUDENT***\n\n" +
                "Mideterm grade is: " + midterm + "\n" +
                "Final Exam is: " + finalExamGrade + "\n" +
                "Research grade is: " + research + "\n" +
                "Presentation grade is: " + presentation + "\n\n" +
                "Final Numeric Grade is: " + finalNumericGrade + "\n" +
                "Final Letter Grade is: " + finalLetterGrade);
            break;
    //Case 2 is a Math Student
        case 2:
            midterm = Integer.parseInt(JOptionPane.showInputDialog("Enter the Midterm Grade"));
            finalExamGrade = Integer.parseInt(JOptionPane.showInputDialog("Enter the Final Examination Grade"));
            finalNumericGrade = (midterm * MATH_MIDTERM_PERCENTAGE) +
                    (finalExamGrade * MATH_FINALEXAM_PERCENTAGE);

            if(finalNumericGrade >= 90)
                finalLetterGrade = "A";
            else
                if((finalNumericGrade >= 83) && (finalNumericGrade < 90))
                    finalLetterGrade = "B";
            else
                if((finalNumericGrade >= 76) && (finalNumericGrade < 83))
                    finalLetterGrade = "C";
            else
                if((finalNumericGrade >=65) & (finalNumericGrade < 76))
                    finalLetterGrade = "D";
            else
                if(finalNumericGrade <65)
                    finalLetterGrade = "F";
                JOptionPane.showMessageDialog(null, "***MATH STUDENT***\n\n" +
                    "Midterm grade is: " + midterm + "\n" +
                    "Final Exam is: " + finalExamGrade + "\n\n" +
                    "Final Numeric Grade is: " + finalNumericGrade + "\n" +
                    "Final Letter Grade is: " + finalLetterGrade);
            break;
    //Case 3 is a Science Student
        case 3:
            midterm = Integer.parseInt(JOptionPane.showInputDialog("Enter the Midterm Grade"));
            finalExamGrade = Integer.parseInt(JOptionPane.showInputDialog("Enter the Final Examination Grade"));
            research = Integer.parseInt(JOptionPane.showInputDialog("Enter the Research Grade"));
            finalNumericGrade = (midterm * SCIENCE_MIDTERM_PERCENTAGE) +
                    (finalExamGrade * SCIENCE_FINALEXAM_PERCENTAGE) +
                    (research * SCIENCE_RESEARCH_PERCENTAGE);

            if(finalNumericGrade >= 90)
                finalLetterGrade = "A";
            else
                if((finalNumericGrade >= 80) && (finalNumericGrade < 90))
                    finalLetterGrade = "B";
            else
                if((finalNumericGrade >= 70) && (finalNumericGrade < 80))
                    finalLetterGrade = "C";
            else
                if((finalNumericGrade >= 60) && (finalNumericGrade <70))
                    finalLetterGrade = "D";
            else
                if(finalNumericGrade < 60)
                    finalLetterGrade = "F";

            JOptionPane.showMessageDialog(null, "***SCIENCE STUDENT***\n\n" +
                "Midterm grade is: " + midterm + "\n" +
                "Final Exam is: " + finalExamGrade + "\n" +
                "Research grade is: " + research + "\n\n" +
                "Final Numeric Grade is: " + finalNumericGrade + "\n" +
                "Final Letter Grade is: " + finalLetterGrade);
            break;
        default:
            JOptionPane.showMessageDialog(null, response + " - is not a valid student type");
            System.exit(0);
        }
    System.exit(0); 
    }
}
}

【问题讨论】:

  • else if(Integer.parseInt(response) &lt; 1 || Integer.parseInt(response) &gt; 3) { 未关闭。由于条件不满足,您总是转到代码的最后一行,即System.exit
  • 提示:缩进你的代码,不要在你的switch 中的cases 中放入大量代码。设计您的代码并将其拆分为小部分。
  • 谢谢 Maroun^2,我会考虑的。我认为 switch 语句中也有相当大的块,可能这本书的作者只是为了教育目的而这样做。我发现这本书的缩进也不是很好。感谢您指出这一点!

标签: java switch-statement dialog


【解决方案1】:

关闭最后一个else if 括号{

else if(Integer.parseInt(response) < 1 || Integer.parseInt(response) > 3) {
    JOptionPane.showMessageDialog(null, response + " - is not a valid student type");
    System.exit(0);
}

然后把else放在它下面:

else{

这应该可以解决您的问题。

【讨论】:

  • 感谢工作!我认为这是我复制的书中的一个错字。确实,您总是以 else 结束一系列 if/else-if,而不是 else-if。再加上System.out(0); 在那之后结束了它。再次感谢!
【解决方案2】:

这是你的工作代码检查它:

public static void main(String[] args) {

            final double ENGLISH_MIDTERM_PERCENTAGE = .25;
            final double ENGLISH_FINALEXAM_PERCENTAGE = .25;
            final double ENGLISH_RESEARCH_PERCENTAGE = .30;
            final double ENGLISH_PRESENTATION_PERCENTAGE = .20;

            final double MATH_MIDTERM_PERCENTAGE = .50;
            final double MATH_FINALEXAM_PERCENTAGE = .50;

            final double SCIENCE_MIDTERM_PERCENTAGE = .40;
            final double SCIENCE_FINALEXAM_PERCENTAGE = .40;
            final double SCIENCE_RESEARCH_PERCENTAGE = .20;


            int midterm = 0;
            int finalExamGrade = 0;
            int research = 0;
            int presentation = 0;
            double finalNumericGrade = 0;
            String finalLetterGrade = "";
            String response;
        //What type of student are we calculating?
            response = JOptionPane.showInputDialog("Enter student type (1=English, 2=Math, 3=Science)");

            if(response == null){
                JOptionPane.showMessageDialog(null, "You clicked on the Cancel button");

            }
            else if(response.equals("")){
                JOptionPane.showMessageDialog(null, "You must make an entry in the InputBox");

            }
            else if(Integer.parseInt(response) < 1 || Integer.parseInt(response) > 3) {
                JOptionPane.showMessageDialog(null, response + " - is not a valid student type");
                System.exit(0);
            }
        //Student type is valid, now let's calculate grade
            switch(Integer.parseInt(response)){
        //Case 1 is an English Student
            case 1:
                midterm = Integer.parseInt(JOptionPane.showInputDialog("Enter the Midterm Grade"));
                finalExamGrade = Integer.parseInt(JOptionPane.showInputDialog("Enter the Final Examination Grade"));
                research = Integer.parseInt(JOptionPane.showInputDialog("Enter the Research Grade"));
                presentation = Integer.parseInt(JOptionPane.showInputDialog("Enter the Presentation Grade"));
                finalNumericGrade = (midterm * ENGLISH_MIDTERM_PERCENTAGE) + 
                        (finalExamGrade * ENGLISH_FINALEXAM_PERCENTAGE) + 
                        (research * ENGLISH_RESEARCH_PERCENTAGE) + 
                        (presentation * ENGLISH_PRESENTATION_PERCENTAGE);

            if(finalNumericGrade >=93)
                finalLetterGrade = "A";
            else 
                if((finalNumericGrade >= 85) && (finalNumericGrade < 93))
                    finalLetterGrade = "B";
            else 
                if((finalNumericGrade >= 78) && (finalNumericGrade < 85))
                    finalLetterGrade = "C";
            else 
                if((finalNumericGrade >= 70) && (finalNumericGrade < 78))
                    finalLetterGrade = "D";
            else 
                if (finalNumericGrade < 70)
                    finalLetterGrade = "F";

            JOptionPane.showMessageDialog(null, "***ENGLISH STUDENT***\n\n" +
                    "Mideterm grade is: " + midterm + "\n" +
                    "Final Exam is: " + finalExamGrade + "\n" +
                    "Research grade is: " + research + "\n" +
                    "Presentation grade is: " + presentation + "\n\n" +
                    "Final Numeric Grade is: " + finalNumericGrade + "\n" +
                    "Final Letter Grade is: " + finalLetterGrade);
                break;
        //Case 2 is a Math Student
            case 2:
                midterm = Integer.parseInt(JOptionPane.showInputDialog("Enter the Midterm Grade"));
                finalExamGrade = Integer.parseInt(JOptionPane.showInputDialog("Enter the Final Examination Grade"));
                finalNumericGrade = (midterm * MATH_MIDTERM_PERCENTAGE) +
                        (finalExamGrade * MATH_FINALEXAM_PERCENTAGE);

                if(finalNumericGrade >= 90)
                    finalLetterGrade = "A";
                else
                    if((finalNumericGrade >= 83) && (finalNumericGrade < 90))
                        finalLetterGrade = "B";
                else
                    if((finalNumericGrade >= 76) && (finalNumericGrade < 83))
                        finalLetterGrade = "C";
                else
                    if((finalNumericGrade >=65) & (finalNumericGrade < 76))
                        finalLetterGrade = "D";
                else
                    if(finalNumericGrade <65)
                        finalLetterGrade = "F";
                    JOptionPane.showMessageDialog(null, "***MATH STUDENT***\n\n" +
                        "Midterm grade is: " + midterm + "\n" +
                        "Final Exam is: " + finalExamGrade + "\n\n" +
                        "Final Numeric Grade is: " + finalNumericGrade + "\n" +
                        "Final Letter Grade is: " + finalLetterGrade);
                break;
        //Case 3 is a Science Student
            case 3:
                midterm = Integer.parseInt(JOptionPane.showInputDialog("Enter the Midterm Grade"));
                finalExamGrade = Integer.parseInt(JOptionPane.showInputDialog("Enter the Final Examination Grade"));
                research = Integer.parseInt(JOptionPane.showInputDialog("Enter the Research Grade"));
                finalNumericGrade = (midterm * SCIENCE_MIDTERM_PERCENTAGE) +
                        (finalExamGrade * SCIENCE_FINALEXAM_PERCENTAGE) +
                        (research * SCIENCE_RESEARCH_PERCENTAGE);

                if(finalNumericGrade >= 90)
                    finalLetterGrade = "A";
                else
                    if((finalNumericGrade >= 80) && (finalNumericGrade < 90))
                        finalLetterGrade = "B";
                else
                    if((finalNumericGrade >= 70) && (finalNumericGrade < 80))
                        finalLetterGrade = "C";
                else
                    if((finalNumericGrade >= 60) && (finalNumericGrade <70))
                        finalLetterGrade = "D";
                else
                    if(finalNumericGrade < 60)
                        finalLetterGrade = "F";

                JOptionPane.showMessageDialog(null, "***SCIENCE STUDENT***\n\n" +
                    "Midterm grade is: " + midterm + "\n" +
                    "Final Exam is: " + finalExamGrade + "\n" +
                    "Research grade is: " + research + "\n\n" +
                    "Final Numeric Grade is: " + finalNumericGrade + "\n" +
                    "Final Letter Grade is: " + finalLetterGrade);
                break;
            default:
                JOptionPane.showMessageDialog(null, response + " - is not a valid student type");
                System.exit(0);
            }

    }

你在关闭elseif(Integer.parseInt(response) &lt; 1 || Integer.parseInt(response) &gt; 3)条件时犯了一个错误

【讨论】:

  • 谢谢桑托什!我添加了另一个 else {} 来包含 switch 语句,并且修复了它。 :)
猜你喜欢
  • 1970-01-01
  • 2014-05-12
  • 1970-01-01
  • 1970-01-01
  • 2013-05-26
  • 2013-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多