折騰代碼真是個無比耗時的東西啊,不知不覺,十分鐘,二十分鐘,三十分鐘。。。
課後編程題,讓讀入數目不確定的考試分數,並且判斷有多少個分數高於或等於平均分,有多少個分數低於平均分。輸入一個負數標誌輸入結束。假設最高分為100.。。。
先有雞蛋還是先有雞?讓我從生物學角度太好回答了,但是編程的話。。。額。
先初始化一個數組list,數組長度就定了,就不能滿足數目不確定的考試分數了。但是想先輸入分數再初始化數組呢,先輸入的分數又沒處存了,所以,小弟對策是先定義並初始化一個很長的數組,長度n,再根據輸入的分數的數目初始化另一個數組list2,來把有效輸入轉存到新數組。再對新數組進行操作。
PS:前邊,那個n,可以寫很大很大,不管怎麼寫,都是個確定的數,而不是無窮吧,貌似這個數組長度也沒上限吧?
那這就太局限了,只要不是無限,你定義多大的n,總有不夠用的時候,總會有溢出的風險啊。。
PS:如果定義一個很大的數組,再加手動輸入那些成績的話,可能手抽筋也寫不到他溢出的時候,但是這裡討論的是理論,理論上會溢出
不知道有沒有更好的方法,暫時就想這麼多。
我只是一個看書看到第六章並且沒做全練習題的菜鳥,勿鄙視。。。。。。
package java06.ProgramTest;
//課後題4,輸入數目不確定的數組
import javax.swing.JOptionPane;
public class Program_6_4 {
public static void main(String[] args){
int n=1000;
//尷尬啊,想通過計算輸入的成績的總數來給Index賦值,用來初始化數組,但是不初始化數組又沒處存輸入的成績
int[] myList=new int[n];//我暫時通過一個手動賦值來初始化數組把
int number=0;
int i=0;
for(i=0;number>=0;i++){
String inputString=JOptionPane.showInputDialog("Enter a score. /n"+
"Negative number to end~!!!/nThe allowable max score is 100.");
number=Integer.parseInt(inputString);
if(number>=0)
myList[i]=number;
}
i--;
System.out.println("Score's amount is "+i);
//直接用原來那個數組有風險,輸入的數量剛好和定義的數組相等固然是好,
//但是你輸入的不夠n的話,那些0,就全算平均值了,所以要把沒輸入的預設0的都給屏蔽掉
//這裡我們採用的方法是,在這new一個,把前邊數組的值賦過來
int[] myList2=new int[i];
int index=i-1;
for(int k=0;k<=index;k++){
myList2[k]=myList[k];
}
System.out.println("/nTest:average "+computeAverage(myList)+"一千個數的平均值");
System.out.println("/naverage"+computeAverage(myList2));
System.out.println("/nTest: 大於等於平均值: "+
computeCountAboveAverage(computeAverage(myList),myList)+"一千個數中大於等於平均值的");
System.out.println("/n大於等於平均值: "+computeCountAboveAverage(computeAverage(myList2),myList2));
System.out.println("/nTest: 小於平均值: "+
computeCountBelowAverage(computeAverage(myList),myList)+"一千個數中小於平均值的");
System.out.println("/n小於平均值: "+computeCountBelowAverage(computeAverage(myList2),myList2));
}
//計算平均值
public static double computeAverage(int[] list){
int sum=0;
double average=0;
for(int i=0;i<list.length;i++){
sum+=list[i];
}
// average=sum/list.length;//bug 先Mark了,以後注意
average=(double)sum/list.length;
return average;
}
//計算獲得平均成績以上的成績數目
public static int computeCountAboveAverage(double average,int[] list){
int count=0;
for(int i=0;i<list.length;i++){
if(list[i]>=average)
count++;
}
return count;
}
//計算獲得平均成績以下的成績數目
public static int computeCountBelowAverage(double average,int[] list){
int count=0;
for(int i=0;i<list.length;i++){
if(list[i]<average)
count++;
}
return count;
}
}
後記。類的執行個體變數和靜態變數稱為類屬變數或資料域。定義在方法內部的變數稱為局部變數。不管在何處聲明,類屬變數的範圍是整個類。類屬變數和方法在類中可以按任何順序聲明。
例外:一個資料域需要引用另一個資料域來進行初始化,另一個資料域必須先聲明(嚴格的順序限制,書上有明文規定了)。