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("");
}
}
}
想实现根据总分来排出名次,但是不知道哪里错了
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
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 数值计算离散正交多项式