7-4 学生Map (20 分)

30 篇文章 6 订阅

7-4 学生Map (20 分)
编写学生类,包含学号no、姓名name、成绩score,提供必要的构造函数、toString函数和equals/hashcode函数,其中,toString函数的格式为“no:xxx name:xxx score:xxx”,no参与equals和hashcode的计算 在main函数中构造一个Map容器存放学生对象 从命令行输入多个学生对象,存入Map中,其中key为学号,value为学生对象。 从命令行中读入在学生集合上的操作,具体操作包含: add 添加一个学生(包含学号和学生姓名) delete 删除一个学生(包含学号) set 修改一个学生信息(只修改某学号学生的成绩) 完成操作后按学生的学号从小到大的顺序输出所有学生的信息 输出时按照学生的学号顺序输出

输入格式:
学生个数 学生对象数据 操作数 操作内容

输出格式:
按照学号顺序输出集合中的学生

输入样例:
在这里给出一组输入。例如:

4
1 wong 90
2 liu 80
3 chen 70
4 fang 60
3
add 5 duan 80
delete 3
set 4 70
输出样例:
在这里给出相应的输出。例如:

no:1 name:wong score:90
no:2 name:liu score:80
no:4 name:fang score:70
no:5 name:duan score:80


import java.util.*;
import java.util.Map.Entry;


class student{

  String name;
  String no,score;
public student(String name, String no, String score) {
	super();
	this.name = name;
	this.no = no;
	this.score = score;
}
public String getScore() {
	return score;
}
public void setScore(String score) {
	this.score = score;
}
@Override
public String toString() {
	return "no:" + no + " name:" + name + " score:" + score ;
}
@Override
public int hashCode() {
	final int prime = 31;
	int result = 1;
	result = prime * result + ((name == null) ? 0 : name.hashCode());
	result = prime * result + ((no == null) ? 0 : no.hashCode());
	result = prime * result + ((score == null) ? 0 : score.hashCode());
	return result;
}
@Override
public boolean equals(Object obj) {
	/*if (this == obj)
		return true;
	if (obj == null)
		return false;
	if (getClass() != obj.getClass())
		return false;
	student other = (student) obj;
	if (name == null) {
		if (other.name != null)
			return false;
	} else if (!name.equals(other.name))
		return false;
	if (no == null) {
		if (other.no != null)
			return false;
	} else if (!no.equals(other.no))
		return false;
	if (score == null) {
		if (other.score != null)
			return false;
	} else if (!score.equals(other.score))
		return false;*/
	student other = (student) obj;
	if (no == null) {
		if (other.no != null)
			return false;
	} else if (!no.equals(other.no))
		return false;
	return true;
}
}
public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		int n=sc.nextInt();	
        Map<String,student> mp=new TreeMap();
        for(int i=0;i<n;i++) {
        	String no=sc.next(); 
        	String na=sc.next();
        	String s=sc.next();
        	student st =new student(na,no,s);
        	mp.put(no, st) ;       	
        }
        n=sc.nextInt();
        for(int i=0;i<n;i++) {
        	String a=sc.next(); 
        	if(a.charAt(0)=='a') {
        		String no=sc.next(); 
        	    String na=sc.next();
        	    String s=sc.next();
        	    student st =new student(na,no,s);
            	mp.put(no, st);
        	}else if(a.charAt(0)=='d'){
        		String no=sc.next(); 
        		mp.remove(no);
        	}else {
        		String no=sc.next(); 
        		String y=sc.next();
        		mp.get(no).setScore(y);
        	}
        	
        }
        Iterator it=mp.entrySet().iterator();
		while(it.hasNext()) {
			Entry ex=(Entry)it.next();
			if(it.hasNext()) {
				System.out.println(ex.getValue().toString()); 
			}			
			else
				System.out.print(ex.getValue().toString()); 
		}
    
	}

}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 题目描述:给定若干个学生的成绩,每个学生有多个科目的成绩,求总最高的学生。 解题思路:首先需要读入每个学生的成绩,可以使用二维数组来存储。然后遍历每个学生的成绩,计算出每个学生的总,并记录下总最高的学生的编号和总。最后输出最高的学生的编号和总即可。 代码示例: ```python # 读入学生的成绩 scores = [] n = int(input("请输入学生的数量:")) for i in range(n): score = list(map(int, input("请输入第{}个学生的成绩:".format(i+1)).split())) scores.append(score) # 计算每个学生的总,并记录总最高的学生的编号和总 max_score = max_student = for i in range(n): total_score = sum(scores[i]) if total_score > max_score: max_score = total_score max_student = i + 1 # 输出最高的学生的编号和总 print("总最高的学生是第{}个学生,总为{}。".format(max_student, max_score)) ``` 运行示例: ``` 请输入学生的数量:3 请输入第1个学生的成绩:80 90 70 请输入第2个学生的成绩:85 95 75 请输入第3个学生的成绩:90 100 80 总最高的学生是第3个学生,总为270。 ``` ### 回答2: 根据题意,给定若干个学生的成绩,要我们找出其中总最高的学生。具体做法可以为以下几个步骤: 1.读入学生的信息 首先需要读入每个学生的信息,包括姓名和各科成绩。可以用一个二维数组来存储学生信息,每一行表示一个学生,每一列表示一门课程成绩。 2.计算每个学生的总 将每个学生的各科成绩加起来,得到每个学生的总。可以用循环语句遍历数组,累加每个学生的成绩。 3.比较总,找出最高 用一个变量maxScore来记录目前为止出现的最高数,再用一个变量maxStudent记录当前总最高的学生的信息。在遍历数组的过程中,如果发现某个学生的总比maxScore还要高,则更新maxScore和maxStudent的值。 4.输出结果 最后只需要输出maxStudent即可,即为总最高的学生。 总体思路比较简单,属于比较基础的数组操作,但需要注意一些细节问题,如如何处理输入、如何比较数值大小等。此外,如果有多个学生得到了相同的最高数,需要明确题目中没有说明怎么处理这种情况,可以选择任选一个或输出所有数最高的学生。 ### 回答3: 这道题目我们可以通过建立一个字典,将每个学生的成绩存储起来,再进行查询总最高的学生。具体方法如下: 首先,我们要了解本题中给出的数据结构。提供的数据是由学生姓名和其对应的三门考试成绩组成的列表。在Python中,我们可以使用列表嵌套字典的方式来组织数据。 接下来,我们可以先定义一个字典,用于存储各个学生的成绩。以学生姓名为键,其对应的值为一个字典,包含三门考试的成绩。具体实现如下: ``` scores = { 'Tom': {'math': 60, 'english': 70, 'chinese': 80}, 'Jack': {'math': 80, 'english': 90, 'chinese': 70}, 'Lucy': {'math': 75, 'english': 85, 'chinese': 95}, 'Lily': {'math': 85, 'english': 80, 'chinese': 90}, 'John': {'math': 70, 'english': 75, 'chinese': 60} } ``` 接下来,我们需要遍历字典中的键值对,计算每个学生的总成绩,并找出总最高的学生。具体实现可以写成如下的代码: ``` max_total_score = 0 # 存储最高总 max_total_score_student = '' # 存储最高总对应的学生 for student, scores in scores.items(): # 计算学生的总成绩 total_score = sum(scores.values()) # 判断是否更新最高总 if total_score > max_total_score: max_total_score = total_score max_total_score_student = student print('总最高的学生是', max_total_score_student) ``` 这段代码中,我们使用了`items()`方法来遍历字典中的键值对。对于每个键值对,我们先计算该学生的总成绩,然后判断是否需要更新最高总对应的学生。最后,输出最高总对应的学生的姓名。 综上所述,本题中我们需要掌握字典用法和循环遍历字典的方法,以及如何求和和判断大小。对于其他类似的题目,我们也可以采用类似的操作来解决问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值