請問誰能幫我看看我Java的程式碼哪裡寫錯了...

題目:

使用一維陣列處理。某班學生M個人,某次考試共考N科課程,依次輸入每位學生N科總分,求全班總平均以及平均分數及格學生人數。

(1)在main method中,使用者輸入M與N;接著輸入每個學生N科總分,學生總成績必須介於0~100*N,錯誤輸入須顯示錯誤訊息,並重新輸入。呼叫下述method完成程式。例如M=3,N=2,為全班共3位學生,總共考兩科:接著輸入3位學生2科總分:{180,199,110}。

(2)寫一個method計算每一位學生平均分數。傳入成績陣列與科目數N,回傳平均分數。例如M=3,N=2:input:{180,199,110}, output:{90,99,55}。

(3)寫一個method計算平均及格的學生人數,傳入成績陣列與科目數,回傳平均及格人數。例如:M=3,N=2:input:{180,199,110}, output:2。

(4)寫一個method計算全班學生的平均分數後回傳。例如:M=3,N=2:input:{180,199,110}, output:81.3。

我的程式碼請到:

http://www.wretch.cc/blog/frank0125

因為奇摩知識能打的字太少哩...XD

程式執行在輸入分數完後會顯示:

Exception in thread \"main\"java.lang.ArrayIndexOutOfBoundsException:2

at Test2.average(Test2.java:45)

at Test2.main(Test2.java:26)

為啥會超出陣列的範圍啊??

麻煩請知道的人幫解一下吧~~Orz

感恩~~>3<b

Update:

P.S.

排版不好還請多見諒...Orz

Update 2:

那為什麼我寫的會出現"超出陣列範圍"的訊息呢??

Update 3:

恩...這可能是一個問題!!

但我改了以後輸入還是會出現"超出陣列範圍"的訊息

因為(輸入總分180 199 110)顯示個人平均時都會卡在90 99

然後就出現:Exception inthread "main" java.lang.ArrayIndexOutOfBoundsException:2

(少一個陣列XD)

為啥會這樣呢...>m

Update 4:

問題可能是出在算個人平均分數的那個陣列

可我找不到...

能否幫看看問題出在哪...Orz

Update 5:

在研究XupJ大大的程式碼後...

我發現問題是出在:

for (int index = 0; index < b.length←這裡; index++)

只是這樣代表的是同樣的數字...

為什麼我用int z不行但用b.length(陣列的長度)

卻可以把陣列完整的顯示出來呢??

百思不得其解ing~Orz...

要看我的程式碼請到:http://www.wretch.cc/blog/frank0125%E8%A7%80%E7%9C...

THX~^M^~y

Update 6:

喔喔~我看到我問題所在了...

我:

public static int pass(int z, int[] b)

public static double[] average(int z, int[] b)

和:

arrayTwo = pass(y, a);

public static int pass(int z, int[] b)

都只有呼叫y的數值

但陣列的長度應該是x而不是y

所以我少呼叫x才會導致陣列超出範圍~

應該要在多設一個數值呼叫x才對...

一個小小的失誤...

害我搞了老半天>x<

謝謝各位的解答~~也謝謝下面給的意見~

Update 7:

上面第三行打錯了...

應該是:

array = average(y, a);

才對...XD

2 Answers

Rating
  • 2 decades ago
    Favorite Answer

    import java.util.*;

    public class Test2 {

    public static void main(String[] args) {

    Scanner keyboard = new Scanner(System.in);

    int M, N;//M:人數 , N:科目數

    int[] score;//每個學生N科總分

    System.out.println("Please enter how many students are there?");

    M = keyboard.nextInt();

    System.out.println("Please enter how many subjects are there?");

    N = keyboard.nextInt();

    System.out.println("Please enter the total subjects score for each students:");

    score = new int[M];

    for (int index = 0; index < M; index++) {

    score[index] = keyboard.nextInt();

    while(score[index] < 0 || score[index] > N*100) {

    System.out.println("The scores you enter cannot below 0 or above 100!");

    System.out.println("Please reenter again!");

    score[index] = keyboard.nextInt();

    }

    }

    double[] array;

    array = average(N, score);

    int arrayTwo;

    arrayTwo = pass(N, score);

    double arrayThree;

    arrayThree = averageTwo(M, N, score);

    System.out.print("The average scores of each students are:");

    for (int index = 0; index < M; index++) {

    System.out.print(" " + array[index]);

    }

    System.out.println();

    System.out.println("The number of students whose score is over 60 is: " + arrayTwo);

    System.out.println("The average score of the whole class is: " + arrayThree);

    }

    public static double[] average(int N, int[] score) {

    double[] averagePerson = new double[score.length];

    for (int index = 0; index < score.length; index++) {

    averagePerson[index] = score[index] / N;

    }

    return averagePerson;

    }

    public static int pass(int N, int[] score) {

    int count = 0;

    for (int index = 0; index < score.length; index++) {

    if (score[index] / N > 60) {

    count++;

    }

    }

    return count;

    }

    public static double averageTwo(int M,int N, int[] score) {

    int sum = 0;

    double averageClass;

    for (int index = 0; index < score.length; index++) {

    sum += score[index];

    }

    averageClass = (double)sum / (double)(M*N);

    return averageClass;

    }

    }

    2006-01-25 18:12:43 補充:

    你這程式會出現陣列索引值超出範圍

    所以我把函數裡所有的變數都寫成你題目中的M、N和score

    免得讓你給搞混掉

    幫變數命名也是很重要的喔

    只是老師們常常會跳過....

    Source(s): 剛剛寫的
  • double[] averagePerson = new double[z];

    averagePerson[z] = b[index]/z;

    以上這2行肯定出錯,你原本是不要要寫成

    averagePerson[index] = b[index]/z;

    ...?

    2006-01-25 13:34:09 補充:

    問題點:

    int[] a = new int[x];

    array = average(y, a);

    你確定x會等於y嗎..?

Still have questions? Get your answers by asking now.