这个案例非常经典,嵌套了很多知识。做了一遍又一遍。干货很多。推荐给大家。对数组长度,转化的理解,嵌套循环,遍历的理解,冒泡排序,输出,多次输出,换行等等都有涉及到。总之非常经典。
第一阶段确定学生人数,确定课程数目,确定课程名称。
/**
*/
Scanner in=new Scanner(System.in);
System.out.println("请输入学生人数:");
int perNum=in.nextInt();
String [] perName=new String[perNum];
System.out.println("请输入课程数:");
int scNum=in.nextInt();
String scName[]=new String [scNum];
for (int i = 0; i < scNum; i++) {
System.out.println("请输入"+(i+1)+"课程名称:");
scName[i]=in.next();
}
第二阶段,确定每一个学生姓名,确定每一个课程成绩
/*
**/
Scanner in=new Scanner(System.in);
System.out.println("请输入学生人数:");
int perNum=in.nextInt();
String [] perName=new String[perNum];
System.out.println("请输入课程数:");
int scNum=in.nextInt();
String scName[]=new String [scNum];
double sc[][]=new double[perNum][scNum];
double sum[]=new double [scNum];
double avg[]=new double [scNum];
for (int i = 0; i < scNum; i++) {
System.out.println("请输入"+(i+1)+"课程名称:");
scName[i]=in.next();
}
//外层循环perName[i]不变,内层循环scName[j]改变一轮。
for (int i = 0; i <perNum; i++) {
System.out.println("请输入"+(i+1)+"学生姓名");
perName[i]=in.next();
for (int j = 0; j < scNum; j++) {
System.out.println("请输入"+perName[i] +scName[j]+"的成绩");
sc[i][j]=in.nextDouble();
}
}
第三阶段测试。
/**
*/
/*for (int i = 0; i < sc.length; i++) {
System.out.println("学名"+perName[i]);
}
System.out.println("***********");
for (int i = 0; i < sc.length; i++) {
System.out.println("科名"+scName[i]);
}
System.out.println("***********");
for (int i = 0; i < sc.length; i++) {
System.out.println("成绩"+sc[i]);
}
System.out.println("***********");
for (int i = 0; i < sc.length; i++) {
System.out.println("总分"+sum2[i]);
}
System.out.println("***********");
for (int i = 0; i < sc.length; i++) {
System.out.println("平均分"+avg2[i]);
}
System.out.println("***********");
*/
第四阶段,计算总分,计算平均分。输出。其实输出非常难,应该算是第五阶段。
请大家瞧一瞧我出的洋相。类似的等等七八次,还有第一行也出错了不少、
第五阶段输出总分与平均分。
/**
。更变态的是排行榜排序。更是难上加难。应该算是第四阶段。
而且因为表格太难,甚至可以分为三个阶段。如此就算第四阶段输出学生成绩
第五阶段输出计算的部分,总分,平均分。
第六阶段,输出排行榜。
首先将第三阶段部分,以及测试阶段的全部注释掉。
**/
Scanner in=new Scanner(System.in);
System.out.println("请输入学生人数:");
int perNum=in.nextInt();
String [] perName=new String[perNum];
System.out.println("请输入课程数:");
int scNum=in.nextInt();
String scName[]=new String [scNum];
double sc[][]=new double[perNum][scNum];
double sum[]=new double [scNum];
double avg[]=new double [scNum];
String aa[] =new String [perNum];
for (int i = 0; i < scNum; i++) {
System.out.println("请输入"+(i+1)+"课程名称:");
scName[i]=in.next();
}
String a="";
for (int i = 0; i <perNum; i++) {
System.out.println("请输入"+(i+1)+"学生姓名");
perName[i]=in.next();
for (int j = 0; j < scNum; j++) {
System.out.println("请输入"+perName[i] +"第"+(j+1)+"门成绩"); //二维数组存放特定学生的特定科目的特定成绩。
// 猛一看起来好像三维数组,这样理解,经纬度确定一个地方的位置。
// 二维数组也是用竖向下标与横向下标一对下标确定成绩。
sc[i][j]=in.nextDouble();
sum[i]=sum[i]+sc[i][j];
}
avg[i]=sum[i]/scNum;
}
System.out.print("学生");
for (int i = 0; i < scName.length; i++) {
System.out.print("\t"+scName[i]);
}
System.out.print("\t总分"+"\t平均分"+"\t排行榜");
System.out.println();
//到了二维输出的时候。嵌套循环搭配二维数组。绝配
//换行不换行也是二维数组输出的难点。
for (int i = 0; i <perNum ; i++) {
System.out.print(perName[i]);
for (int j = 0; j < scNum; j++) {
System.out.print("\t"+sc[i][j]);
}
System.out.print("\t"+sum[i]+"\t"+avg[i]);
System.out.println();
}
}
第六阶段输出排行榜。
终于完成了排序。
再加上名词的对比效果
最终代码,内容限制,去掉了注释,反正前面都有。
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
System.out.println("请输入学生人数:");
int perNum=in.nextInt();
String [] perName=new String[perNum];
System.out.println("请输入课程数:");
int scNum=in.nextInt();
String scName[]=new String [scNum];
double sc[][]=new double[perNum][scNum];
double sum[]=new double [scNum];
double avg[]=new double [scNum];
String aa[] =new String [perNum]; 用数组整合每一排的信息,方便调序。整体挪移。
for (int i = 0; i < scNum; i++) {
System.out.println("请输入"+(i+1)+"课程名称:");
scName[i]=in.next();
}
String a="";
for (int i = 0; i <perNum; i++) {
System.out.println("请输入"+(i+1)+"学生姓名");
perName[i]=in.next();
for (int j = 0; j < scNum; j++) {
System.out.println("请输入"+perName[i] +"第"+(j+1)+"门成绩");
sc[i][j]=in.nextDouble();
sum[i]=sum[i]+sc[i][j];
a=a+sc[i][j]; //作用是整合变化成绩信息,作为中转。不然的有两个变量ij又要嵌套循环了
}
avg[i]=sum[i]/scNum;
aa[i] =perName[i]+a+sum[i]+avg[i];//整合一行的信息为一个字符串,每一行的字符串构成一个数组。最大的数组。
}
System.out.print("学生"); //不能换行,将复杂问题化解成多个小问题。要一步步来
for (int i = 0; i < scName.length; i++) {
System.out.print("\t"+scName[i]);
}
System.out.print("\t总分"+"\t平均分"+"\t排行榜");
System.out.println();
//嵌套冒泡排序。注意总分排序,紧跟着这一行都要排序。
for (int j = 0; j < perNum-1; j++) {
for (int i = 0; i < perNum-1; i++) {
if (sum[i]<sum[i+1]) {
double t=sum[i]; String tt=aa[i];
sum[i]=sum[i+1]; aa[i]=aa[i+1];
sum[i+1]=t; aa[i+1]=tt;
}
}
}
for (int i = 0; i <perNum ; i++) {
System.out.print(perName[i]);
for (int j = 0; j < scNum; j++) {
System.out.print("\t"+sc[i][j]);
}
System.out.print("\t"+sum[i]+"\t"+avg[i]+"\t第"+(i+1)+"名");
System.out.println();
}
2025 - 快车库 - 我的知识库 重庆启连科技有限公司 渝ICP备16002641号-10
企客连连 表单助手 企服开发 榜单123