一个最简单的学生管理程序。就是最后一个问题没弄出来,郁闷。要求是:
编写一个程序,用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.");
}
}
}
}
编写一个程序,用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.");
}
}
}
}
解决方案 »
- 如何获取JRadioButton的值
- 浮点数为什么要用移码,而不用补码呢?
- 请问如何根据指定大小对文件进行ZIP压缩?急
- hashmap死循环
- 谁可以告诉我哪可以下些Swing的资料啊 100大分 想要就来
- 请问如何读入Windows2003里证书管理导出的私钥?
- 看了一段代碼,但少了點東西。想知道怎麼填上去。
- 新手一个最简单的问题,求助大家?
- Java中如何在Java中计算两个日期相差的年数、月数和天数?
- 郁闷!满头包:( 对输入输出流不熟悉,那位大虾能不吝赐教,谢谢先
- comparable 和comparator 的返回值问题~~
- 提交按键:<input type="submit" 与普通按键<input type="button" 的区别
----------------------------------------------------------------
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 退出
放进去之后怎么排序,我的目的是要取出集合中最大的和最小的值。
我把取最大和最小的方法一起加到了count()中,是为了实验,成功后再做二个方法来放这两个逻辑。
大家加油啊,帮帮忙。谢谢各位了~
需要代码的朋友可以看一看。
//编写一个程序,用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.");
}
}
}
}
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;
}
其他的根据你的程序来具体确定了。思路是这样的!
IF(TEMP>MAX){
MAX = TEMP;
}
IF(TEMP<MIN){
MIN = TEMP;
}
取第一个和最后一个,就是你要的。
实现Comparator接口的class排序,基本是最优化的排序了。