兼 叚 2021-04-22 19:10 采纳率: 75%
浏览 51
已采纳

想实现根据总分来排出名次,但是不知道哪里错了

import java.util.Scanner;
public class FinallText {

	public static void main(String[] args) {
		 Scanner sc=new Scanner(System.in);
	        //定义学生总数
	        int n=3;
	        //定义学生科目数
	        int m=2;
	        //创建学生类型的数组,设置每一个学生
	        Student[] stu=new Student[3];
	        for(int i=0;i<n;i++){
	        	//创建每个对象为一个学生
	            stu[i]=new Student(m);
	            /*只有一个next表示输入字符串
	             * 这里调用name和num方法来输入学生名字和学号 */
	            System.out.println("请输入第"+(i+1)+"名学生的姓名");
	            stu[i].name=sc.next();
	            System.out.println("请输入第"+(i+1)+"名学生的学号");
	            stu[i].num=sc.next();
	            for(int j=0;j<m;j++){
	                System.out.println("请输入第"+(i+1)+"名学生的第"+(j+1)+"科成绩");
	                stu[i].Grade[j]=sc.nextInt();
	            }
	        }
	        Calculate cal=new Calculate();
	        cal.getSort(stu,n,m);
	    }
	}


public class Student {
	    //定义名字、各科分数(数组,因为有六科)、学号以及总分的变量
	    String name;
	    int[] Grade;
	    String num;
	    int sum;
	    Student(int m) {
	        this.Grade=new int[m];
	    }
	    //定义名字、学号、总分的方法
	    public void setName(String name){
	        this.name=name;
	    }
	    public void setNum(String num){
	        this.num=num;
	    }
	    public int getSum(int m) {
	        for (int i = 0; i < m; i++) {
	            this.sum += Grade[i];
	        }
	        return this.sum;
	    }
	}


public class Calculate {
	int i;
	//设置分类输出的方法
    public void getSort(Student[] s,int n,int m) {
    	//设置学生,分配信息并且进行总名次排序
        Student x;
        for (this.i = 1; i < n; i++) {
            for (int j = 0; j < n-1; j++) {
            	//调用sum方法来排序
            	if (s[j].sum < s[j + 1].sum) {
                    x = s[j];
                    s[j] = s[j + 1];
                    s[j + 1] = x;
                }
            }
        }
        System.out.println("    姓名       学号     总分  排名");
        for (int j = 0; j < n; j++) {
        	//%s是占位符,输出的是字符串类型,数字表示占了几个位置
            System.out.printf("%6s %10s %6d %2s",s[j].name,s[j].num,s[j].getSum(m),(j+1));
            System.out.println("");
        }
    }
}

  • 写回答

2条回答 默认 最新

  • allway2 2021-04-22 20:37
    关注
    package ask;
    
    import java.util.Scanner;
    
    public class FinallText {
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		// 定义学生总数
    		int n = 3;
    		// 定义学生科目数
    		int m = 2;
    		// 创建学生类型的数组,设置每一个学生
    		Student[] stu = new Student[3];
    		for (int i = 0; i < n; i++) {
    			// 创建每个对象为一个学生
    			stu[i] = new Student(m);
    			/*
    			 * 只有一个next表示输入字符串 这里调用name和num方法来输入学生名字和学号
    			 */
    			System.out.println("请输入第" + (i + 1) + "名学生的姓名");
    			stu[i].name = sc.next();
    			System.out.println("请输入第" + (i + 1) + "名学生的学号");
    			stu[i].num = sc.next();
    			for (int j = 0; j < m; j++) {
    				System.out.println("请输入第" + (i + 1) + "名学生的第" + (j + 1) + "科成绩");
    				stu[i].Grade[j] = sc.nextInt();
    			}
    		}
    		Calculate cal = new Calculate();
    		cal.getSort(stu, n, m);
    	}
    }
    
    class Student {
    	// 定义名字、各科分数(数组,因为有六科)、学号以及总分的变量
    	String name;
    	int[] Grade;
    	String num;
    	int sum;
    
    	Student(int m) {
    		this.Grade = new int[m];
    	}
    
    	// 定义名字、学号、总分的方法
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	public void setNum(String num) {
    		this.num = num;
    	}
    
    	public int getSum(int m) {
    		this.sum = 0;
    		for (int i = 0; i < m; i++) {
    			this.sum += Grade[i];
    		}
    		return this.sum;
    	}
    }
    
    class Calculate {
    
    	// 设置分类输出的方法
    	public void getSort(Student[] s, int n, int m) {
    		// 设置学生,分配信息并且进行总名次排序
    		Student x;
    		for (int i = 0; i < n; i++) {
    			for (int j = i + 1; j < n; j++) {
    				s[i].getSum(m);
    				s[j].getSum(m);
    				// 调用sum方法来排序
    				if (s[i].sum < s[j].sum) {
    					x = s[j];
    					s[j] = s[i];
    					s[i] = x;
    				}
    			}
    		}
    		System.out.println("    姓名       学号     总分  排名");
    		for (int j = 0; j < n; j++) {
    			// %s是占位符,输出的是字符串类型,数字表示占了几个位置
    			System.out.printf("%6s %10s %6d %2s", s[j].name, s[j].num, s[j].getSum(m), (j + 1));
    			System.out.println("");
    		}
    	}
    }
    

    请输入第1名学生的姓名
    1
    请输入第1名学生的学号
    1
    请输入第1名学生的第1科成绩
    20
    请输入第1名学生的第2科成绩
    20
    请输入第2名学生的姓名
    2
    请输入第2名学生的学号
    2
    请输入第2名学生的第1科成绩
    30
    请输入第2名学生的第2科成绩
    30
    请输入第3名学生的姓名
    3
    请输入第3名学生的学号
    3
    请输入第3名学生的第1科成绩
    10
    请输入第3名学生的第2科成绩
    10
        姓名       学号     总分  排名
         2          2     60  1
         1          1     40  2
         3          3     20  3
     

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式