/*
星期 一 二 三 四
----------------------------------------
時段一 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();
}
}
沒有留言:
張貼留言