Java代码编辑

时间:2013-03-13 16:08:07

标签: java edit

帮助,我无法让我的程序成功运行。它给出了两个输入中期标记和最终标记的错误。我无法通过适当的弹出窗口完全运行它。我曾尝试编写一个接受用户标记的程序,并为未知数量的学生显示相应的字母等级。我的代码如下。

        import javax.swing.*;
    public class StudentGrades_Hann{
        public static void main (String[] args) {
            String input ;
            input= JOptionPane.showInputDialog(" Enter Name, \n ID Number,\n Homework Mark, \n Assignment Mark, \n Midterm Mark, \n and Final Mark \n All Entrys Must Be Separated By Commas");

            int com;
            com= input.indexOf(",");

            String name ;
            name = input.substring(0,com);

            int com2;
    com2= input.indexOf(",", com+1);

    String idnumber ;
    idnumber = input.substring(com+1, com2);

    int com3;
    com3= input.indexOf(",", com2+1);

    String homeworkmark ; 
    homeworkmark = input.substring(com2+1, com3);

    int com4;
    com4= input.indexOf(",", com3+1);

        String assignmentmark ; 
        assignmentmark = input.substring(com3+1, com4);

        int com5;
        com5= input.indexOf(",", com4+1);

        String midtermmark ; 
        midtermmark = input.substring(com4+1, com5);

        int com6;
        com6= input.indexOf(",", com5+1);

        String finalmark ; 
        finalmark = input.substring(com4+1);

        double as ;
        as = Double.parseDouble (assignmentmark.trim());

        double hw ;
        hw = Double.parseDouble (homeworkmark.trim());

        double mm ;
        mm = Double.parseDouble (midtermmark.trim());



        double fm ;
        fm = Double.parseDouble (finalmark.trim());

        String grade ; 

        double totalmark ; 
        totalmark= 0.1*hw+0.1*as+0.3*mm+0.5*fm ;

        double mnf ;
        mnf= 0.5*fm+0.3*mm ;

        if(totalmark < 50 || mnf < 50) {
            JOptionPane.showMessageDialog(null,name + idnumber + "Fail") ;
        }
        else if (totalmark < 85) {
            JOptionPane.showMessageDialog(null, name + idnumber + "A") ;
        }

        else if (totalmark < 75) {
            JOptionPane.showMessageDialog(null,name + idnumber + "B") ;
        }

        else if (totalmark <65) {
            JOptionPane.showMessageDialog(null, name + idnumber + "C");
        }

        else if (totalmark <=50) {
            JOptionPane.showMessageDialog(null,name + idnumber + "D") ;
        }

        else {
            JOptionPane.showMessageDialog(null, "Invalid Entry") ;
        }

    }

    }   

2 个答案:

答案 0 :(得分:1)

您没有为下一个值更新,的索引。

对于第二个值,如果输入为name, 1, 1, 1, 1, 1,则会尝试解析 "1, 1"

使用String.split(","),检查数组中元素的数量是否符合预期,然后解析它们,就像这个伪代码一样:

String[] strings = input.split(",");
if (string.length == 6) { //name and 5 values
    name = strings[0];
    id = strings[1];
    ...
} else {
       //provided values are incorrect
}

`

答案 1 :(得分:0)

  

我收到异常错误“主题中的异常”主“   java.lang.NumberFormatException:对于输入字符串:“80,90”

您试图在代码中的某处解析“80,90”,这是不可解析的双倍。所以你得到NumberFormatException。

因此,在寻找indexOf和substring操作时,不要费力。试试吧

String[] splitted = input.split(",");

你在分割给定字符串时遇到了错误。 我发现了错误。

String finalmark ; 
    finalmark = input.substring(com4+1);

应该是

String finalmark ; 
    finalmark = input.substring(com5+1);