2013-12-11 45 views
0

我的計劃中的一切工作除此之外的工作。我看不出有什麼問題。如果用戶輸入超過25個等級,我需要該程序吐出一條錯誤消息。這裏是我的代碼我的if塊有什麼問題?

package my.meancalculator; 

import javax.swing.JOptionPane; 
import javax.swing.JFrame; 
import java.text.DecimalFormat; 


public class MeanCalcUI extends javax.swing.JFrame { 

private final DecimalFormat formatter = new DecimalFormat("#0.0"); 
private double gradeAverage; 
private double standardDeviation; 
JFrame frame = new JFrame(); 
private double[] gradeArray = new double[25]; 
private int numberOfGradesInput = 0; 


public MeanCalcUI() { 
    initComponents(); 
    setLocationRelativeTo(null); 
} 

public double getAverage(double[] gradeArray, int numberOfGradesInput) { 

    double sum = 0; 

    for (int i = 0; i < numberOfGradesInput; i++) { 
     sum = sum + gradeArray[i]; 
    } 

    return (sum/numberOfGradesInput); 
} 

public double getStdDev(double[] gradeArray, int numberOfGradesInput, double average) { 

    double sum = 0; 

    for (int i = 0; i < numberOfGradesInput; i++) { 
     sum = sum + Math.pow((gradeArray[i] - average), 2); 
    } 

    return Math.sqrt(sum/numberOfGradesInput); 
} 


private void btnExitActionPerformed(java.awt.event.ActionEvent evt) {           
    System.exit(0); 
}          

private void btnEnterGradesActionPerformed(java.awt.event.ActionEvent evt) {            

    if (numberOfGradesInput > 25) { 
     // We've already finished entering the max # of grades 
     JOptionPane.showMessageDialog(frame, 
       "You can only input 25 grades!", 
       "Too much data!", 
       JOptionPane.ERROR_MESSAGE); 
     return;   
    } 
    do { 
     String gradeInput = JOptionPane.showInputDialog(frame, 
       "Enter Grade", 
       "Enter Grade", 
       JOptionPane.PLAIN_MESSAGE); 

     // When we receive empty/null input, we're done entering grades 
     if (gradeInput == null || gradeInput.length() == 0) { 
      break; 
     } 

     double gradeValue = 0; // Set to avoid 'may be unset' compiler error 
     try { 
      gradeValue = Double.parseDouble(gradeInput); 
     } catch (NumberFormatException e) { 
      JOptionPane.showMessageDialog(frame, 
        "Your input must be numeric!", 
        "Bad Data!", 
        JOptionPane.ERROR_MESSAGE); 
      continue; // start over again 
     } 

     // Put the grade into the array and update the number of grades entered 
     gradeArray[numberOfGradesInput] = gradeValue; 
     numberOfGradesInput++; 

     // Add to the grade total 
     txtNumGrades.setText(formatter.format(numberOfGradesInput)); 

     //use the getAverage method to get the average of the grades 
     gradeAverage = getAverage(gradeArray, numberOfGradesInput); 
     txtMean.setText(formatter.format(gradeAverage)); 

     //use the getStdDev method to get the standard deviation 
     standardDeviation = getStdDev(gradeArray, numberOfGradesInput, gradeAverage); 
     txtStdDeviation.setText(formatter.format(standardDeviation)); 
    } while (numberOfGradesInput < 25); 



} 

我用我的整個代碼,以防萬一它是如果這是造成這種情況。每次運行程序時,我都會輸入一個超過25倍的窗口號,並要求用戶輸入關閉,並且不會彈出錯誤消息。有什麼我在這裏做錯了嗎?

+0

的,如果是do..while循環 – Taylor

+0

之外不,不是這樣。這是第一個我嘗試過的東西仍然沒有彈出 – Akira

回答

0

我認爲你需要改變你的條件>=,爲您做/而25分的成績要求,之後你的病情仍然會是假的,你會再次進入循環,將獲得出界異常

if (numberOfGradesInput >= 25) 
+0

如果numberOfGrades大於或等於25,就可以使用它。最多允許用戶輸入25個等級,但不能再輸入 – Akira

+0

@Akira這是w你需要檢查他們是否已經輸入了25 *。 '如果(numberOfGradesInput> 25)'檢查他們是否已經輸入超過25 *。 – Radiodef

0

認爲你需要改變你的條件> =,爲您做/而25分的成績要求,之後你的病情仍然會是假的,你會再次進入循環,將獲得出界異常

if (numberOfGradesInput >= 25) 

當您的按鈕操作被觸發它應該檢查它是否大於或等於25.在你的if語句和你的while循環之間你有一個沒有被覆蓋的用例。

如果等級數爲25,該怎麼辦?用你編寫的代碼將跳過你的if語句,並輸入你的do-while循環並添加「26年級」(實際上會導致IndexOutOfBoundsException而不是打印出錯誤對話框)

+0

我改變了它,就像你說的那樣,它沒有什麼區別。它也沒有添加第26個數字,它只是停了下來。 – Akira

0

問題出在您的病情,做一段時間。我試圖做最少的修改代碼,使其工作。

 do { 
      if (numberOfGradesInput >= 25) { 
       // We've already finished entering the max # of grades 
       JOptionPane.showMessageDialog(frame, 
         "You can only input 25 grades!", 
         "Too much data!", 
         JOptionPane.ERROR_MESSAGE); 
       return; 
      } 
      else{ 
       //.... 
      } 
     } while (numberOfGradesInput < 26); 
+0

它在do-while循環中遞增。 – Radiodef

+0

我其實做了numberOfGrades ++ ...問題是,當我輸入25個等級的錯誤信息不會彈出,我必須再次點擊動作按鈕才能彈出 – Akira

+0

我修改了我的評論請看看,如果你需要乾淨或正確的代碼讓我知道 –