2016年11月27日 星期日

請將表的內容直接於程式中以陣列初值方式設定

/* 星期 一 二 三 四 ---------------------------------------- 時段一 18.2 17.3 15.0 13.4 時段二 23.8 25.1 20.6 17.8 時段三 20.6 21.5 18.4 15.7 請將上表的內容直接於程式中以陣列初值方式設定,並依序完成下列各題: (a)印出陣列內容。 (b)每日的平均溫度。 (c)時段一、時段二與時段三的平均氣溫。 (d)溫度最高的日子與時段。 (e)溫度最低的日子與時段。 */ public class hw6_8 { private double[][] data = {{18.2, 17.3, 15.0, 13.4}, {23.8, 25.1, 20.6, 17.8}, {20.6, 21.5, 18.4, 15.7}}; public void print(){ //印出陣列內容 for(int i=0;i<data.length;i++){ for(int j=0;j<data[i].length;j++){ System.out.print("data["+i+"]"+"["+j+"]="+data[i][j]+"\t"); } System.out.println(); //換行 } }

public void columnaverage(){ //計算行的總和與平均 /*宣告sum為一維陣列,大小設4個元素 (因為星期一到四有4行,每個元素分別儲存星期1、2、3、4加總) 可寫成double sum[]={0,0,0,0}; data[0].length,抓取data陣列第0列的元素個數,結果為整數4,代表有4行 */ double sum[]=new double[data[0].length];//此寫法不用手動計算行數給值 for(int i=0;i<data.length;i++){ for(int j=0;j<data[i].length;j++){ sum[j]+=data[i][j]; //只儲存行的值並加總 } }

for(int i=0;i<sum.length;i++){ System.out.printf("day %d 的總和=%.2f度 平均溫度=%.2f度\n",
i+1,sum[i],(sum[i])/(sum.length-1)); //sum陣列長度為4,,但一行的元素值只有三個,因此sum.length-1再與行的總和相除才正確 } }

public void rowaverage(){ //計算列的總和與平均 double sum=0.0; for(int i=0;i<data.length;i++){ sum=0.0; //每印完一次時段總和即歸零,否則總和會三列全部相加
for(int j=0;j<data[i].length;j++){ sum+=data[i][j]; //儲存列的總和 } System.out.printf("時段 %d 的總和=%.2f 平均溫度=%.2f度\n",
i+1,sum,(sum)/(data[0].length)); /*data陣列的列數只有三列,但一列有4個元素 因此算平均時不能使用data.length,否則會變成(sum/3)
所以必須改用data[0].length,代表取得第0列元素的個數,也就是4
*/ } } public void maxvalue(){ //找出陣列中溫度最高的時段和對應之日期 int day=0,period=0; double max=data[0][0]; for(int i=0;i<data.length;i++) { for(int j=0;j<data[i].length;j++){ double sum=data[i][j]; if(max<sum){ max=sum; day=j; period=i; } } }

System.out.printf("星期 %d 的第%d時段 溫度最高=%.2f度",day+1,period+1,max);
System.out.println(); //換行 //由於陣列索引值是從0開始,所以day與period都必須加一才符合對應之日期與時段 } public void minvalue(){ int day=0,period=0; double min=data[0][0]; for(int i=0;i<data.length;i++){ for(int j=0;j<data[i].length;j++){ double sum=data[i][j]; if(min>sum){ min=sum; day=j; period=i; } } } System.out.printf("星期 %d 的第%d時段 溫度最低=%.2f度",day+1,period+1,min); } public static void main(String[] args) { //程式進入點 hw6_8 app = new hw6_8 (); app.print();//印出陣列內容 app.columnaverage(); //印出行(星期1~4)的總和與平均 app.rowaverage(); //印出列(時段1~3)的總和與 app.maxvalue(); app.minvalue(); } }

沒有留言:

張貼留言