一个集合问题,纳闷。给100,并跪求答案。

levi_java 2006-11-25 09:27:07
一个最简单的学生管理程序。就是最后一个问题没弄出来,郁闷。要求是:
编写一个程序,用MAP实现学生成绩单的存储和查询,并且对成绩进行排序存储到TREESET中,求出平均成绩、最大值和最小值。
就只有求最大和最小值了。高手请看看吧。我是这样的,希望能够有耐心花1分种看看这段丑陋的代码:
package sameproblem;

import java.io.*;
//编写一个程序,用MAP实现学生成绩单的存储和查询,并且对成绩进行排序存储到TREESET中,求出平均成绩、最大值和最小值。
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeSet;
class Student{
String ID;
String Name;
double Grade;
public Student(String id, String name, int grade) {
ID = id;
Name = name;
Grade = grade;
}
public double getGrade() {
return Grade;
}
public void setGrade(int grade) {
Grade = grade;
}
public String getID() {
return ID;
}
public void setID(String id) {
ID = id;
}
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public String toString(){
return ID+" "+Name+" "+Grade;
}
void say(){

System.out.println(toString());
}
}
class MapAndTreeset {
Map con=new HashMap();
double num;
public char readCommand(){
BufferedReader br = new
BufferedReader(new InputStreamReader(System.in));
char c=0;
try{

c=(char)br.read();
}catch(IOException ie){
System.exit(1);
}
//System.out.println(c);
return c;
}
void showMenu(){
System.out.println("请选择:");
System.out.println("。。。。。。。。。。。。1 添加学生信息");
System.out.println("。。。。。。。。。。。。2 学生信息列表");
System.out.println("。。。。。。。。。。。。3 查询学生信息");
System.out.println("。。。。。。。。。。。。4 所有学生平均成绩");
System.out.println("。。。。。。。。。。。。5 所有学生的最高成绩");
System.out.println("。。。。。。。。。。。。6 所有学生的最低成绩");
System.out.println("。。。。。。。。。。。。7 退出");

}
void newStudent() throws IOException{
Student astu=new Student(doID(),doName(),doInt());
con.put(astu.ID, astu);

}
void searchStudent() throws IOException{

System.out.println("请输入查询ID:");
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
String c=in.readLine();

Student d=(Student)con.get(c);
System.out.println(d);
//return c;

}
static String doID() throws IOException{
System.out.println("请输入ID:");
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
String s=in.readLine();
return s;
}
static String doName() throws IOException{
System.out.println("请输入名字:");
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
String s=in.readLine();
return s;
}
static int doInt() throws IOException{
System.out.println("请输入成绩:");
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
int s=Integer.parseInt(in.readLine());
return s;
}
public void listStudents(){
System.out.println("ID "+"Name "+"Grade");
Collection emps=con.values();
Iterator it=emps.iterator();
while(it.hasNext()){
((Student)it.next()).say();
}
}
public void count(){
double sum=0;

Collection emps=con.values();
//TreeSet a=new Collection();
//TreeSet set=new TreeSet();
Iterator it=emps.iterator();
while(it.hasNext()){
for(int i=0;i<emps.size();i++){
sum=sum+((Student)it.next()).Grade;

}
num=sum/(double)emps.size();
//Student max=(Student) ((TreeSet) emps).first();
System.out.println("所有学生的平均成绩为: "+num);
//max.say();就是这些地方,不知道怎么放到TreeSet中取最大和最小值。唉~弄了好久了
//System.out.println(max.say());
}
}
public static void main(String args[]) throws IOException{
MapAndTreeset demo=new MapAndTreeset();
boolean flag=true;
while(flag){
demo.showMenu();
char c=demo.readCommand();
switch(c){
case '1':
demo.newStudent();
break;
case '2':
demo.listStudents();
break;
case '3':
demo.searchStudent();
break;
case '4':
demo.count();
case '5':
break;

case '6':
break;
case '7':
flag=false;
break;
default:
System.out.println("Command not found!Please choise again.");
}
}
}
}
...全文
438 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
linzhongren 2006-11-28
  • 打赏
  • 举报
回复
热切期待已工作程序员加入本程序员群:31626550,
如果已经工作请附加:程序员!
如果尚未工作,也欢迎加入!
love_li 2006-11-28
  • 打赏
  • 举报
回复
看不懂,需要加强才行
爱我洋洋 2006-11-28
  • 打赏
  • 举报
回复
mark
lcllcl987 2006-11-28
  • 打赏
  • 举报
回复
http://blog.csdn.net/lcllcl987/archive/2005/06/27/405112.aspx
lcllcl987 2006-11-28
  • 打赏
  • 举报
回复
你的Student如果实现Comparator接口,就很好排序了。排序后,
取第一个和最后一个,就是你要的。
实现Comparator接口的class排序,基本是最优化的排序了。
fang830422 2006-11-28
  • 打赏
  • 举报
回复
好长,阅了!!!
lizhaogui 2006-11-28
  • 打赏
  • 举报
回复
遍历一次不就得了,MAX = 0;MIN = 0
IF(TEMP>MAX){
MAX = TEMP;
}
IF(TEMP<MIN){
MIN = TEMP;
}
xxxzheng 2006-11-28
  • 打赏
  • 举报
回复
从map中放入set很简单:
Map <String,Integer>map = new HashMap<String,Integer>();
map.put("1",99);
................
看你的程序定义了;
Set <Map.Entry<String, Integer>> set = new TreeSet();
对set排序
你可以实现一个Comparator
如:
如果你有student类
则可在student类中实现
也可以单独实现
Student s1 = (Student)arg0;
Student s2 = (Student)arg1;
if(s1.getScore()==s2.getScore()){
return 0;
}else if(s1.getScore()<s2.getScore()){
return -1;
}else{
return 1;
}
其他的根据你的程序来具体确定了。思路是这样的!
levi_java 2006-11-27
  • 打赏
  • 举报
回复
结果还是我自己弄出来了,方法实在是很笨拙。唉~技术实在是有待提高。
需要代码的朋友可以看一看。
//编写一个程序,用MAP实现学生成绩单的存储和查询,并且对成绩进行排序存储到TREESET中,求出平均成绩、最大值和最小值。
import java.io.*;
import java.util.*;
class Student{
String ID;
String Name;
double Grade;
Student(){

}
public Student(String id, String name, int grade) {
ID = id;
Name = name;
Grade = grade;
}
public double getGrade() {
return Grade;
}
public void setGrade(int grade) {
Grade = grade;
}
public String getID() {
return ID;
}
public void setID(String id) {
ID = id;
}
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public String toString(){
return ID+" "+Name+" "+Grade;
}
void say(){

System.out.println(toString());
}
}
class MapAndTreeset {
Map con=new TreeMap();
Set set=new TreeSet();
double num;
public char readCommand(){
BufferedReader br = new
BufferedReader(new InputStreamReader(System.in));
char c=0;
try{

c=(char)br.read();
}catch(IOException ie){
System.exit(1);
}
//System.out.println(c);
return c;
}
void showMenu(){
System.out.println("请选择:");
System.out.println("..............1 添加学生信息...........");
System.out.println("..............2 学生信息列表...........");
System.out.println("..............3 查询学生信息...........");
System.out.println("..............4 所有学生平均成绩........");
System.out.println("..............5 所有学生的最高成绩.......");
System.out.println("..............6 所有学生的最低成绩.......");
System.out.println("..............7 退出..................");

}
void newStudent() throws IOException{
Student astu=new Student(doID(),doName(),doInt());
//Integer id=new Integer(Integer.parseInt(astu.ID));
con.put(astu.ID, astu);
set.add(astu.ID);

}
void searchStudent() throws IOException{

System.out.println("请输入查询ID:");
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
String c=in.readLine();

Student d=(Student)con.get(c);
System.out.println(d);
//return c;

}
static String doID() throws IOException{
System.out.println("请输入ID:");
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
String s=in.readLine();
return s;
}
static String doName() throws IOException{
System.out.println("请输入名字:");
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
String s=in.readLine();
return s;
}
static int doInt() throws IOException{
System.out.println("请输入成绩:");
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
int s=Integer.parseInt(in.readLine());
return s;
}
public void listStudents(){
System.out.println("ID "+"Name "+"Grade");
Collection emps=con.values();
Iterator it=emps.iterator();
while(it.hasNext()){
((Student)it.next()).say();
}
}
public void count(){
double sum=0;

Collection emps=con.values();
Iterator it=emps.iterator();
while(it.hasNext()){
for(int i=0;i<emps.size();i++){
sum=sum+((Student)it.next()).Grade;
}
num=sum/(double)emps.size();
System.out.println("所有学生的平均成绩为: "+num);
}
}
public void maxGrade(){
Iterator it2=set.iterator();
Student value=new Student();
while(it2.hasNext()){
//String xx=(String)((TreeSet)set).firt();
String keys=(String)it2.next();
value=(Student)con.get(keys);
}
value.say();
}
public void mixGrade(){
Iterator it2=set.iterator();
Student value=new Student();
if(it2.hasNext()){
String keys=(String)it2.next();
value=(Student)con.get(keys);
}
value.say();
}
public static void main(String args[]) throws IOException{
MapAndTreeset demo=new MapAndTreeset();
boolean flag=true;
while(flag){
demo.showMenu();
char c=demo.readCommand();
switch(c){
case '1':
demo.newStudent();
break;
case '2':
demo.listStudents();
break;
case '3':
demo.searchStudent();
break;
case '4':
demo.count();
break;
case '5':
demo.maxGrade();
break;
case '6':
demo.mixGrade();
break;
case '7':
flag=false;
break;
default:
System.out.println("Command not found!Please choise again.");
}
}
}
}
malligator 2006-11-26
  • 打赏
  • 举报
回复
fisherofsmea 2006-11-26
  • 打赏
  • 举报
回复
学习学习
chilongge 2006-11-26
  • 打赏
  • 举报
回复
好贴
sg552 2006-11-26
  • 打赏
  • 举报
回复
狂顶 assre
assre 2006-11-26
  • 打赏
  • 举报
回复
ps: 添加学生信息时, 作一下数据类型检查是不是更好一些?比如, id一定要是一个数字.
assre 2006-11-26
  • 打赏
  • 举报
回复
有一些包没有导入

我改了一下得到了正确的结果

只要把import部分该一下就可以了。

我能正常运行的源代码:
----------------------------------------------------------------
import java.util.*;
import java.io.*;


class Student{
String ID;
String Name;
double Grade;
public Student(String id, String name, int grade) {
ID = id;
Name = name;
Grade = grade;
}
public double getGrade() {
return Grade;
}
public void setGrade(int grade) {
Grade = grade;
}
public String getID() {
return ID;
}
public void setID(String id) {
ID = id;
}
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public String toString(){
return ID+" "+Name+" "+Grade;
}
void say(){

System.out.println(toString());
}
}
class MapAndTreeset {
Map con=new HashMap();
double num;
public char readCommand(){
BufferedReader br = new
BufferedReader(new InputStreamReader(System.in));
char c=0;
try{

c=(char)br.read();
}catch(IOException ie){
System.exit(1);
}
//System.out.println(c);
return c;
}
void showMenu(){
System.out.println("请选择:");
System.out.println("。。。。。。。。。。。。1 添加学生信息");
System.out.println("。。。。。。。。。。。。2 学生信息列表");
System.out.println("。。。。。。。。。。。。3 查询学生信息");
System.out.println("。。。。。。。。。。。。4 所有学生平均成绩");
System.out.println("。。。。。。。。。。。。5 所有学生的最高成绩");
System.out.println("。。。。。。。。。。。。6 所有学生的最低成绩");
System.out.println("。。。。。。。。。。。。7 退出");

}
void newStudent() throws IOException{
Student astu=new Student(doID(),doName(),doInt());
con.put(astu.ID, astu);

}
void searchStudent() throws IOException{

System.out.println("请输入查询ID:");
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
String c=in.readLine();

Student d=(Student)con.get(c);
System.out.println(d);
//return c;

}
static String doID() throws IOException{
System.out.println("请输入ID:");
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
String s=in.readLine();
return s;
}
static String doName() throws IOException{
System.out.println("请输入名字:");
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
String s=in.readLine();
return s;
}
static int doInt() throws IOException{
System.out.println("请输入成绩:");
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
int s=Integer.parseInt(in.readLine());
return s;
}
public void listStudents(){
System.out.println("ID "+"Name "+"Grade");
Collection emps=con.values();
Iterator it=emps.iterator();
while(it.hasNext()){
((Student)it.next()).say();
}
}
public void count(){
double sum=0;

Collection emps=con.values();
//TreeSet a=new Collection();
//TreeSet set=new TreeSet();
Iterator it=emps.iterator();
while(it.hasNext()){
for(int i=0;i<emps.size();i++){
sum=sum+((Student)it.next()).Grade;

}
num=sum/(double)emps.size();
//Student max=(Student) ((TreeSet) emps).first();
System.out.println("所有学生的平均成绩为: "+num);
//max.say();就是这些地方,不知道怎么放到TreeSet中取最大和最小值。唉~弄了好久了
//System.out.println(max.say());
}
}
public static void main(String args[]) throws IOException{
MapAndTreeset demo=new MapAndTreeset();
boolean flag=true;
while(flag){
demo.showMenu();
char c=demo.readCommand();
switch(c){
case '1':
demo.newStudent();
break;
case '2':
demo.listStudents();
break;
case '3':
demo.searchStudent();
break;
case '4':
demo.count();
case '5':
break;

case '6':
break;
case '7':
flag=false;
break;
default:
System.out.println("Command not found!Please choise again.");
}
}
}
}


运行时结果:
-------------------------------------------------------------------------
请选择:
。。。。。。。。。。。。1 添加学生信息
。。。。。。。。。。。。2 学生信息列表
。。。。。。。。。。。。3 查询学生信息
。。。。。。。。。。。。4 所有学生平均成绩
。。。。。。。。。。。。5 所有学生的最高成绩
。。。。。。。。。。。。6 所有学生的最低成绩
。。。。。。。。。。。。7 退出
1
请输入ID:
33
请输入名字:
33
请输入成绩:
78
请选择:
。。。。。。。。。。。。1 添加学生信息
。。。。。。。。。。。。2 学生信息列表
。。。。。。。。。。。。3 查询学生信息
。。。。。。。。。。。。4 所有学生平均成绩
。。。。。。。。。。。。5 所有学生的最高成绩
。。。。。。。。。。。。6 所有学生的最低成绩
。。。。。。。。。。。。7 退出
2
ID Name Grade
33 33 78.0
请选择:
。。。。。。。。。。。。1 添加学生信息
。。。。。。。。。。。。2 学生信息列表
。。。。。。。。。。。。3 查询学生信息
。。。。。。。。。。。。4 所有学生平均成绩
。。。。。。。。。。。。5 所有学生的最高成绩
。。。。。。。。。。。。6 所有学生的最低成绩
。。。。。。。。。。。。7 退出
3
请输入查询ID:
33
33 33 78.0
请选择:
。。。。。。。。。。。。1 添加学生信息
。。。。。。。。。。。。2 学生信息列表
。。。。。。。。。。。。3 查询学生信息
。。。。。。。。。。。。4 所有学生平均成绩
。。。。。。。。。。。。5 所有学生的最高成绩
。。。。。。。。。。。。6 所有学生的最低成绩
。。。。。。。。。。。。7 退出
4
所有学生的平均成绩为: 78.0
请选择:
。。。。。。。。。。。。1 添加学生信息
。。。。。。。。。。。。2 学生信息列表
。。。。。。。。。。。。3 查询学生信息
。。。。。。。。。。。。4 所有学生平均成绩
。。。。。。。。。。。。5 所有学生的最高成绩
。。。。。。。。。。。。6 所有学生的最低成绩
。。。。。。。。。。。。7 退出
levi_java 2006-11-26
  • 打赏
  • 举报
回复
这个程序是没有问题的,我import TreeSet包是为了把Map集合放到TreeSet中,但是怎么放呢?
放进去之后怎么排序,我的目的是要取出集合中最大的和最小的值。
我把取最大和最小的方法一起加到了count()中,是为了实验,成功后再做二个方法来放这两个逻辑。
大家加油啊,帮帮忙。谢谢各位了~
xiaoleichuangzi 2006-11-25
  • 打赏
  • 举报
回复
这么大的程序,我还是第一次见到呢,嘿嘿
我连你用的方法和类都没听过,现在正在自学呢,帮你顶着,有牛人过来指教一下啊

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧