0

ヘルプ、プログラムを正常に実行できません。中間マークと最終マークの2つの入力でエラーが発生します。適切なエンドポップアップで完全に実行できません。ユーザーからの点数を受け取り、不明な数の生徒に適切な成績を表示するプログラムを作成しようとしました。私のコードは次のとおりです。

        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") ;
        }

    }

    }   
4

2 に答える 2

1

,次の値のインデックスを更新していません。

2 番目の値については、入力が の場合、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
}

`

于 2013-03-13T16:19:51.080 に答える
0

例外エラー「Exception in thread "main" java.lang.NumberFormatException: For input string: "80, 90" が表示されます

コードのどこかで "80,90" を解析しようとしていますが、これは double で解析できません。したがって、NumberFormatException が発生しています。

したがって、 indexOf と部分文字列操作を見つけるのにそれほど多くの労力を費やす代わりに。ちょうど試して

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

指定された文字列を分割する際に、どこかで間違いを犯しています。間違いを見つけました。

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

する必要があります

String finalmark ; 
    finalmark = input.substring(com5+1);
于 2013-03-13T16:23:16.953 に答える