2013-03-13 142 views
0

幫助,我無法讓我的程序成功運行。它給我一個錯誤,有兩個輸入用於中期標記和最終標記。彈出適當的結尾時我無法完全運行。我試圖編寫一個程序,接受來自用戶的標記,併爲未知數量的學生顯示適當的字母等級。我的代碼如下。Java代碼編輯

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

    } 

    } 
+0

如果你得到錯誤?我指的是哪一行。 – 2013-03-13 16:09:30

+0

我不確定,但'input.indexOf(「,」);'這些行可能是問題的根源。嘗試使用'String [] in = input.split(「,」);'它將通過','分割您的輸入,並且將創建新的字符串數組。 – Smit 2013-03-13 16:16:50

+0

它不具體。我假設它將字符串轉換爲double。我得到一個異常錯誤「線程中的異常」主要「java.lang.NumberFormatException:對於輸入字符串:」80,90「 \t at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1222) \t at java。在StudentGrades_Hann.main(StudentGrades_Hann.java:55) – user2166241 2013-03-13 16:17:37

回答

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 
} 

`

0

我正在一個異常錯誤「異常在線程」主「 java.lang.NumberFormatException:對於輸入字符串:」80,90「

您正在嘗試t o在代碼中解析「80,90」的地方,這是無法解析的。所以你得到NumberFormatException。

因此,不要在尋找indexOf和substring操作時做這麼多工作。試試吧

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

你在做某處分裂給定字符串的錯誤。 我發現了這個錯誤。

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

應該

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