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 |
|
|
|