首页 > 电脑

这两段稍微有不同的代码输出的结果有区别吗?为什么有区别?

更新时间2019-08-10 05:35:32

第一段:

import java.util.*;

public class 学生管理{

public static void main(String[] args){

Scanner in=new Scanner(System.in);

System.out.println("请输入学生的人数:");

int a=in.nextInt();//变量a用来存储学生的人数

System.out.println("请输入课程的个数");

int b=in.nextInt();//变量b用来存储课程的个数

String[] c=new String[b];//数组c用来存储课程的名称

String[] d=new String[a];//数组d用来存储学生的姓名

int[][] e=new int[a][b];//数组e用来存储特定学生特定的各个课程的成绩 

int[] f=new int[a];//数组f用来储存特定学生的各科成绩总分

int[] g=new int[a];//数组g用来存储特定学生总分的平均分

String[] h=new String[a];//数组h用来存储学生的全部信息

for(int i=0;i<b;i++){

System.out.println("请输入第"+(i+1)+"门课程的名称:");

c[i]=in.next();

}

/*

上面的for循环是循环录入并且存储输入的课程名称

*/

for(int i=0;i<a;i++){

System.out.println("请输入第"+(i+1)+"名学生的姓名:");

d[i]=in.next();

String k="";

int sum=0;//变量sum用来标记总分的初始值

for(int j=0;j<b;j++){

System.out.println("请输入"+d[i]+"的"+c[j]+"成绩");

e[i][j]=in.nextInt();

sum+=e[i][j];

k+=e[i][j]+" ";

}

f[i]=sum;

g[i]=sum/b;

h[i]=d[i]+" "+k+f[i]+" "+g[i];

}

/*

上面的for循环是循环录入特定学生特定的各科课程并计算总分和平均分

*/

for(int i=0;i<f.length-1;i++){

for(int j=0;j<f.length-1;j++){

if(f[j]<f[j+1]){

int t1=f[j];String t=h[j];

f[j]=f[j+1];h[j]=h[j+1];

f[j+1]=t1;h[j+1]=t;

}

}

}

System.out.print("姓名 ");

for(int i=0;i<b;i++){

System.out.print(c[i]+" ");

}

System.out.println("总分 平均分 名次");

for(int i=0;i<a;i++){

System.out.println(h[i]+" 第"+(i+1)+"名");

}

}

}

第二段

import java.util.*;

public class 学生管理{

public static void main(String[] args){

Scanner in=new Scanner(System.in);

System.out.println("请输入学生的人数:");

int a=in.nextInt();//变量a用来存储学生的人数

System.out.println("请输入课程的个数");

int b=in.nextInt();//变量b用来存储课程的个数

String[] c=new String[b];//数组c用来存储课程的名称

String[] d=new String[a];//数组d用来存储学生的姓名

int[][] e=new int[a][b];//数组e用来存储特定学生特定的各个课程的成绩 

int[] f=new int[a];//数组f用来储存特定学生的各科成绩总分

int[] g=new int[a];//数组g用来存储特定学生总分的平均分

String[] h=new String[a];//数组h用来存储学生的全部信息

for(int i=0;i<b;i++){

System.out.println("请输入第"+(i+1)+"门课程的名称:");

c[i]=in.next();

}

/*

上面的for循环是循环录入并且存储输入的课程名称

*/

for(int i=0;i<a;i++){

System.out.println("请输入第"+(i+1)+"名学生的姓名:");

d[i]=in.next();

String k="";

int sum=0;//变量sum用来标记总分的初始值

for(int j=0;j<b;j++){

System.out.println("请输入"+d[i]+"的"+c[j]+"成绩");

e[i][j]=in.nextInt();

sum+=e[i][j];

k+=e[i][j]+" ";

}

f[i]=sum;

g[i]=sum/b;

h[i]=d[i]+" "+k+f[i]+" "+g[i];

}

/*

上面的for循环是循环录入特定学生特定的各科课程并计算总分和平均分

*/

for(int i=0;i<f.length-1;i++){

for(int j=0;j<f.length-1;j++){

if(f[j]<f[j+1]){

String t=h[j];

h[j]=h[j+1];

h[j+1]=t;

}

}

}

System.out.print("姓名 ");

for(int i=0;i<b;i++){

System.out.print(c[i]+" ");

}

System.out.println("总分 平均分 名次");

for(int i=0;i<a;i++){

System.out.println(h[i]+" 第"+(i+1)+"名");

}

}

}


而第一个程序 ,在排序交换中,交换了h和f的值  

   for (int i = 0; i < f.length - 1; i++) {
           for (int j = 0; j < f.length - 1; j++) {
               if (f[j] < f[j + 1]) {
                   int t1 = f[j];
                   String t = h[j];
                   f[j] = f[j + 1];
                   h[j] = h[j + 1];
                   f[j + 1] = t1;
                   h[j + 1] = t;

而第二个程序,只交换了h的值

if (f[j] < f[j + 1]) {
                   String t = h[j];
                   h[j] = h[j + 1];
                   h[j + 1] = t;
               }

两个程序交换代码不同,结果当然不同了


上一篇:c++如何定义一组数组,该数组随数组第一个元素的不同而有所不同。下面这段代码应该怎么改

下一篇:什么是矩阵中RS232通讯协议?