0

入力する科目の数に応じて、学生の平均成績を計算するプログラムを作成することになっています。

これが私のコードですが、subject1の成績を入力する部分では実行されません。

import javax.swing.*;

public class Arrays {
  static  int ctr = 0;
  public static void main(String[] args) {
    String inputStr = "";
    double num2process = 0.0;
    double sum = 0.0, ave = 0.0;
    double[] grade = new double[(int) num2process];

    while (true) {
      try {
        inputStr = JOptionPane.showInputDialog(
            "Enter number of subjects to enter: ");
        num2process = Double.parseDouble(inputStr);

        while (ctr < num2process) {
          grade[ctr] = getNumber();
          sum += grade[ctr];
          ctr++; 
        }
      } catch (NumberFormatException err) {
        JOptionPane.showMessageDialog(
            null,
            "There is an error on entry",
            "Error Message", JOptionPane.WARNING_MESSAGE);
        continue;
      }
      break;    
    }

    // Accumulate the output.
    String output = "";
    int ctr2 = 0;

    output = "";

    while (ctr2 > num2process) {
      output += ("Grade on subject " + (ctr2+1)
                + " is " + grade[ctr]);
      ctr2++;
    }
    ave = sum / num2process;
    output += "\nAverage is " + ave;

    // Display the output.
    JOptionPane.showMessageDialog(
        null,
        output,
        "The result is",
        JOptionPane.INFORMATION_MESSAGE);
  }

  public static int getNumber() throws NumberFormatException {
    String inputStr = "";
    int num = 0;

    try {
      inputStr = JOptionPane.showInputDialog(
          "Enter grade on subject " + (ctr+1));
      num = Integer.parseInt(inputStr);
      return num;
    } catch (NumberFormatException errorAgain) {
      throw errorAgain;
    }
  }
}

エラーの解決を手伝ってくださいありがとう

4

1 に答える 1

0

ArrayIndexOutOfBoundExceptionあなたが初期化しているのであなたのコードは投げています

double[] grade = new double[(int) num2process];

あなたが得る前にnum2process、あなたが初期化double num2process=0.0 したので、それは取っています

double[] grade = new double[0.0];

だから、あなたはそれを次のように変更する必要があります(grade取った後に初期化するnum2process

            String inputStr = "";
            double num2process = 0.0;
            double sum = 0.0, ave = 0.0;

            double[] grade ;          //Just Make an Instance of it

            while(true)
            {
                try
                {
                    inputStr = JOptionPane.showInputDialog("Enter number of subjects to enter: ");
                    num2process = Double.parseDouble(inputStr);
                    grade = new double[(int) num2process];     //Initialize it Here
                    while(ctr<num2process)
                    {
                        grade[ctr]= getNumber();
                        sum += grade[ctr];
                        ctr++; 
                    }

                }
                catch(Exception e){
                    //Your Exception Handling
                }
            }

編集:あなたがコメントしたように:

科目1から科目3までの成績を表示することになっています。平均は問題ありませんが、小数点以下2桁まで減らすにはどうすればよいですか。

これがあなたのためのプログラム全体です:

import java.text.DecimalFormat;

import javax.swing.*;

public class ArrayWithException 
{
        static  int ctr = 0;
        public static void main(String[] args)
        {
            String inputStr = "";
            double num2process = 0.0;
            double sum = 0.0, ave = 0.0;
            double[] grade ;

            while(true)
            {
                try
                {
                    inputStr = JOptionPane.showInputDialog("Enter number of subjects to enter: ");
                    num2process = Double.parseDouble(inputStr);
                    grade = new double[(int) num2process];
                    marks = new double[(int) num2process];
                    while(ctr<num2process)
                    {
                        grade[ctr] = getNumber();
                        sum += grade[ctr];
                        ctr++; 
                    }

                }
                catch (NumberFormatException err)
                {
                    JOptionPane.showMessageDialog(null, "There is an error on entry",
                        "Error Message", JOptionPane.WARNING_MESSAGE);
                    continue;
                }
                break;      

            }

            //accumulate the output
            String output="";
            int ctr2 = 0;

            output = "";

            while(ctr2 > num2process)
            {
                output +=("Grade on subject " +(ctr2+1) + " is "
                                + grade[ctr]);
                ctr2++;

            }

            ave = sum / num2process;
            DecimalFormat df=new DecimalFormat("##.##");   //Here it defines the pattern to follow
            ave=Double.parseDouble(df.format(ave));        //ave is formatted like df
            output +="\nAverage is " + ave;
            for(int i=0;i<grade.length;i++){ 
                output+="\nGrade for Subject "+(i+1)+" is: "+grade[i];
            }

            // display the output

            JOptionPane.showMessageDialog(null,output, "The result is",
                        JOptionPane.INFORMATION_MESSAGE);

        }

        public static int getNumber() throws NumberFormatException
        {
            String inputStr="";
            int num = 0;

            try
            {
                inputStr = JOptionPane.showInputDialog("Enter grade on subject " + (ctr+1));
                num = Integer.parseInt(inputStr);

                return num;

            }
            catch (NumberFormatException errorAgain)
            {
                throw errorAgain;
            }
        }
}
于 2012-12-09T05:51:21.817 に答える