ezlovekbm
|
分享:
▼
x0
|
[Java] 我們期末考要考2維陣列有大大可以交一下嗎??
首先老師會請你印出你的學號跟姓名 第二步會請你印出"未排序的資料" 第三步會請你印出"指定科目的排序" 期末考題型 我看不太懂2維的泡沫排序 可以請大大指點一下 謝謝 大概還會有啥變化 老師說這題會了就差不多了 public class D950104{ public static void main (String[] args){ double week [] []={{18.2,17.3,15.0,13.4,0}, {23.8,25.1,20.6,17.8,0}, {20.6,21.5,18.4,15.7,0}}; //所輸入的質,後面之所以會多各0是為了補足AVG/4的不足 String n[] ={"早上","中午","晚上"}; boolean flag=true; double temp=0; String tempstring; System.out.println("未排序"); System.out.println("時段"+"\t"+"星期一"+"\t"+"星期二"+"\t"+"星期三"+"\t"+"星期四"+"\t"+ .. 訪客只能看到部份內容,免費 加入會員 或由臉書 Google 可以看到全部內容
[ 此文章被ezlovekbm在2006-01-15 11:43重新編輯 ]
|
|
x0
[樓 主]
From:APNIC
| Posted:2006-01-15 01:42 |
|
|
pt730907
|
分享:
▲
▼
這是將你的程式改寫過後的程式碼 應該是你想要的結果.... 我加上註解了 希望你能看的懂我的解釋..... 只是老實說我覺得我寫的程式碼不夠好... 請各位先賢前輩多多指教嚕.... 小弟獻醜了..... 複製程式
public class D950104
{
private static double week [][]={{18.2,17.3,15.0,13.4,0},//所輸入的值,後面之所以
{23.8,25.1,20.6,17.8,0},//會多個0是為了補足AVG/4的不足
{20.6,21.5,18.4,15.7,0}};
public static int i1=0; //用來控制平均氣溫之印出位置
private static double avg = 0; //宣告平均數
public static void out(String []k)
{
int i,j,s;
for(i=0,s=0;i<week.length && s<k.length;i++,s++)
{
System.out.print(k[s] + "\t");
for(j=0;j<=week.length;j++)
{
System.out.print(week[ i ][j]+"\t");
calculate(week[ i ][j],j,i);//呼叫函式進行計算
}
}
}
public static void calculate(double cal,int check1,int check2)//計算平均數
{
avg = avg + cal; //平均數的加總
if(check1==week.length && check2!=week.length)//控制何時該呼叫函式進行印出
{ //並進行換行以排版
outavg(check1); //呼叫函式進行印出平均數
System.out.println();//換行
}
}
public static void outavg(int aj) //印出平均數
{
week[i1][aj+1] = avg/4;
System.out.print(Math.round(week[i1][aj+1]*1000)/1000.0+"\t");//四捨五入到小數點三位
i1++;
avg=0;
}
public static void sort() //進行氣泡排序
{
int k,l;
for (k=0;k<week.length;k++)
{
for (l=0;l+1<=week.length;l++)
{
if (week[k][l]>week[k][l+1])//當原數值大於後數值時
{ //進行交換
double tempstring=week[k][l];
week[k][l] = week[k][l+1];
week[k][l+1] = tempstring;
}
}
}
k=0;l=0;
if(week[k][l]>week[k][l+1]) //如果最小值不在最左邊的話就遞迴
{sort();}
else
{System.out.println();} //符合情況時空行
}
public static void main (String[] args)
{
String n[] ={"早上","中午","晚上"};
System.out.println("未排序");
System.out.println("時段"+"\t"+"星期一"+"\t"+"星期二"+"\t"+"星期三"+
"\t"+"星期四"+"\t"+"平均氣溫");
System.out.println("------"+"\t"+"------"+"\t"+"------"+"\t"+"------"
+"\t"+"------"+"\t"+"--------");
out(n); //呼叫函式進行排序前印出
sort(); //呼叫函式進行排序
System.out.println("排序後");
System.out.println("時段"+"\t"+"星期一"+"\t"+"星期二"+"\t"+"星期三"+
"\t"+"星期四"+"\t"+"平均氣溫");
System.out.println("------"+"\t"+"------"+"\t"+"------"+"\t"+"------"
+"\t"+"------"+"\t"+"--------");
i1=0; //重新初使化,為了印出排序過後的平均氣溫
out(n); //呼叫函式進行排序後印出
}
}
[ 此文章被pt730907在2006-01-16 11:44重新編輯 ]
|
|
x0
[2 樓]
From:台灣中華電信
| Posted:2006-01-15 06:34 |
|
|
pt730907
|
分享:
▲
▼
把你的程式碼跑過一遍後... 才知道你想要的泡沫排序法是判斷平均氣溫的高低來作為 陣列元素兩兩交換的依歸.... 我把解釋標記在註解裡.... 還有這邊給你一點點小建議 就是最好不要主程式(main)就包含了所有的功能... 換句話說,你應該另外宣告一些方法(method)來分別負責處理各自的功能.... 以你這個例子來說,可以宣告三個方法:一個負責印出、一個負責排序、一個負責計算平均數.... 可視需要另行增加 而main函式主要是用來呼叫其他方法.... 這樣發生錯誤時也比較容易偵錯... 且別人也比較能夠看懂你的程式碼.... 複製程式
for (int i=week.length-2;i>=0;i--){ //設成length-2原因是為了要先讓第二陣列之平均氣溫
for (int j=0;j<=i;j++){ //和最後陣列之平均氣溫相比較,至於--的話,是要往回找
if (week[j][4]>week[j+1][4]) //如原平均氣溫大於後平均氣溫
{
for (int k=0;k<week[j].length;k++){//則兩兩陣列全部元素進行交換
temp=week[j][k];
week[j][k]=week[j+1][k];
week[j+1][k]=temp;
}
tempstring=n[j]; //交換時段
n[j]=n[j+1];
n[j+1]=tempstring;
}
}
|
|
x0
[4 樓]
From:台灣中華電信
| Posted:2006-01-15 15:24 |
|
|
pt730907
|
分享:
▲
▼
這是我把我的程式碼修改成你的學校所要求的結果.... 程式執行結果和你的程式碼執行結果一模一樣... 只是唯一的差別是在於我的程式具有物件導向的觀念 也就是說每個方法都負責各自的功能... 不會只交由main函式處理.... 感覺起來也比較清楚.... 複製程式
public class D950104
{
private static double week [][]={{18.2,17.3,15.0,13.4,0},//所輸入的值,後面之所以
{23.8,25.1,20.6,17.8,0},//會多個0是為了補足AVG/4的不足
{20.6,21.5,18.4,15.7,0}};
public static int i1=0; //用來控制平均氣溫之印出位置
private static double avg = 0; //宣告平均數
public static void out(String []k)
{
int i,j,s;
for(i=0,s=0;i<week.length && s<k.length;i++,s++)
{
System.out.print(k[s] + "\t");
for(j=0;j<=week.length;j++)
{
System.out.print(week[ i ][j]+"\t");
calculate(week[ i ][j],j,i);//呼叫函式進行計算
}
}
}
public static void calculate(double cal,int check1,int check2)//計算平均數
{
avg = avg + cal; //平均數的加總
if(check1==week.length && check2!=week.length)//控制何時該呼叫函式進行印出
{ //並進行換行以排版
outavg(check1); //呼叫函式進行印出平均數
System.out.println();//換行
}
}
public static void outavg(int aj) //印出平均數
{
week[i1][aj+1] = avg/4;
System.out.print(week[i1][aj+1]+"\t");
i1++;
avg=0;
}
public static void sort(String []t) //進行氣泡排序
{
int k,l;
int z=0;
for (k=0;k<week.length;k++)
{
for (l=k;l+1<week.length;l++)
{
if (week[l][4]>week[l+1][4])//當原數值大於後數值時
{ //進行交換
while(z<=week.length+1)
{
double tempstring=week[l][z];
week[l][z] = week[l+1][z];
week[l+1][z] = tempstring;
z++;
}
String swap = t[l]; //進行時段交換
t[l] = t[l+1];
t[l+1] = swap;
}
z=0;
}
}
k=0;l=0;
if(week[l][4]>week[l+1][4]) //如果最小值不在最左邊的話就遞迴
{sort(t);}
else
{System.out.println();} //符合情況時空行
}
public static void main (String[] args)
{
String n[] ={"早上","中午","晚上"};
System.out.println("未排序");
System.out.println("時段"+"\t"+"星期一"+"\t"+"星期二"+"\t"+"星期三"+
"\t"+"星期四"+"\t"+"平均氣溫");
System.out.println("------"+"\t"+"------"+"\t"+"------"+"\t"+"------"
+"\t"+"------"+"\t"+"--------");
out(n); //呼叫函式進行排序前印出
sort(n); //呼叫函式進行排序
System.out.println("排序後");
System.out.println("時段"+"\t"+"星期一"+"\t"+"星期二"+"\t"+"星期三"+
"\t"+"星期四"+"\t"+"平均氣溫");
System.out.println("------"+"\t"+"------"+"\t"+"------"+"\t"+"------"
+"\t"+"------"+"\t"+"--------");
i1=0; //重新初使化,為了印出排序過後的平均氣溫
out(n); //呼叫函式進行排序後印出
}
}
|
|
x0
[5 樓]
From:台灣中華電信
| Posted:2006-01-15 16:13 |
|
|
ezlovekbm
|
分享:
▲
▼
大大你太厲害了 我是初學者 太深奧都看不太懂 一維我會排序 可是2維我就不懂
像這題是早中晚排序排完變早晚中 如果要橫的的排序要如何排序
未排序是 排序後 早18.2,17.3,15.0,13.4, 早13.4,15.0,17.3,18.2 中23.8,25.1,20.6,17.8 中17.8,20.6,23.8,25.1 晚20.6,21.5,18.4,15.7 晚15.7,18.4,20.6,21
這樣可以嗎 希望大大能指點我一下謝謝
|
|
x0
[6 樓]
From:APNIC
| Posted:2006-01-15 17:26 |
|
|
ezlovekbm
|
分享:
▲
可以幫我看一下排序那一部分未啥不能排序 謝謝 複製程式
public class E9430068{
public static void main (String[] args){
double week [] []={{18.2,17.3,15.0,13.4,0},
{23.8,25.1,20.6,17.8,0},
{20.6,21.5,18.4,15.7,0}}; //所輸入的質,後面之所以會多各0是為了補足AVG/4的不足
String n[] ={"早上","中午","晚上"};
System.out.println("未排序");
System.out.println("時段"+"\t"+"星期一"+"\t"+"星期二"+"\t"+"星期三"+"\t"+"星期四"+"\t"+"平均氣溫");
System.out.println("------"+"\t"+"------"+"\t"+"------"+"\t"+"------"+"\t"+"------"+"\t"+"--------");
for(int i=0;i<week.length;i++){
double avg=0; //先宣告平均數
System.out.print(n[i]+"\t");
for(int j=0;j<week[i].length-1;j++){ //因為前面有字串有補0,所以要減回來
System.out.print(week[i][j]+"\t");
avg+=week[i][j]; //宣告平均數的加總
}
week[i][4]=avg/4;
System.out.println(week[i][4]); //avg/ 後面為天數
}
for (int k=week.length-1;k>=0;k--)
{
for (int l=0;l<k;l++)
{
if (week[k][l]>week[k][k+1])//當原數值大於後數值時
{ //進行交換
double temp=week[k][l];
week[k][l] = week[k][l+1];
week[k][l+1] = temp;
}
}
}
System.out.println(); //此為空行
System.out.println("排序後");
System.out.println("時段"+"\t"+"星期一"+"\t"+"星期二"+"\t"+"星期三"+"\t"+"星期四"+"\t"+"平均氣溫");
System.out.println("------"+"\t"+"------"+"\t"+"------"+"\t"+"------"+"\t"+"------"+"\t"+"--------");
for (int k=0;k<week.length;k++){
System.out.print(n[k]+"\t");
for (int l=0;l<week[k].length;l++)
System.out.print(week[k][l]+"\t");
System.out.println();
}
}
}
|
|
x0
[9 樓]
From:APNIC
| Posted:2006-01-16 13:49 |
|
|
|