1

これは評価された作業なので、答えを出さないでください。アドバイスだけにしてください!

ユーザーが入力した値に応じて、プログラムに文字列パス、補償パス、または失敗を返させようとしています。ただし、値が返されず、「重み付け」のエラーが発生します。以前は機能していましたが、適切な方法ではありませんでした。これは、結果の前に常に正しい結果が返されるとは限らないためです。それが必要だと思うので配列を追加しましたが、今はエラーが発生しています。乾杯。

enter code here

public class MarkCalculator {
static int[] marks = new int[12];
static int[] weighing = new int[6];

// public static Scanner keyboard = new Scanner(System.in);
public static void main(String[] args) {
    Scanner kb = new Scanner(System.in);
    int weighting;
    int coursework;
    int exammark;

    for (int i = 0; i < marks.length / 2; i++) {
        System.out.println("Please enter course work weighting");
        weighting = kb.nextInt();
        weighing[i] = weighting;
    }

    for (int i = 0; i < marks.length / 2; i++) {
        System.out.println("Please enter course work mark ");
        coursework = kb.nextInt();
        marks[i] = coursework;
    }

    for (int i = 0; i < marks.length / 2; i++) {
        System.out.println("Please enter exam mark ");
        exammark = kb.nextInt();
        marks[i + 6] = exammark;
    }

    System.out.println("Calculating Marks");
    MarkCalculator mc = new MarkCalculator();
    String[] results = mc.computeMarks(marks, weighing);

    for (String result : results) {

        System.out.println("Results are " + result);
    }

}

public String[] computeMarks(int[] marks, int[] weighing) {
    int[] formula = new int[12];
    String[] results = new String[weighing.length];

    for (int i = 0; i < weighing.length; i++) {
        int exam = marks[i];
        int cw = marks[i+weighing.length];
        int weight = weighing[i];

        formula [i]= ((cw + weight) + (exam * (100 - weight)) / 100);

        if ((formula[i]<=39) && (formula[i] > 35)) {
            results[i] = "COMPENSATION PASS";}

        else if (formula[i] >= 40) {
            results[i] = "PASS";
        } 
        else {
            results[i] = "FAIL";
        }
    }
    return results;
}

public static void computeResult (int[] coursework, int[] exammark)
{

    computeResult(coursework,exammark);




}

}

4

4 に答える 4

0

「Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6」というエラーが発生します。

これは、メソッド computeMarks. マークの長さ (int[]) は 12 です。

処理する長さ 6 の変数を宣言するだけです。

int[] formula = new int[6];

for ループの変数 i が 6 に達したとき。次のコードはエラーをスローします。

formula [i]= ((cw + weight) + (exam * (100 - weight)) / 100);

長さ 12 で宣言してみてください。

int[] formula = new int[12];

メソッドcomputeMarksのコードを貼り付けるだけです。

public String[] computeMarks(int[] マーク、int[] 重み付け) { int[] 式 = 新しい int[12]; String[] results = new String[計量.長さ];

    StringBuilder sb = new StringBuilder();

    for (int i = 0; i < weighing.length; i++) {
        sb.setLength(0);

        int exam = marks[i];
        int cw = marks[i + weighing.length];
        int weight = weighing[i];
        formula[i] = ((cw + weight) + (exam * (100 - weight)) / 100);

        if ((formula[i] <= 39) && (formula[i] > 35)) {
            sb.append("COMPENSATION PASS");
        } else if (formula[i] >= 40) {
            sb.append("PASS");
        } else {
            sb.append("FAIL");
        }
        sb.append(" cw mark is ").append(cw).append(" and exam mark is ")
                .append(exam);
        results[i] = sb.toString();
    }
    return results;
}
于 2013-11-07T12:18:12.940 に答える