java中用Scanner实现:输入学生的个数,并输入每个学生的名字还有分数,输出最高分还有第二高分的学生...

我是java初学,请指教...

没加校验
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;

public class $ {
public static void main(String... _) {

Scanner in = new Scanner(System.in);

System.out.print("输入学生个数:");

int num = in.nextInt();
List data = new ArrayList();

for (int i = 0; i < num; i++) {
Bean bean = new Bean();
System.out.print("输入第" + (i + 1) + "个学生的姓名:");
String name = in.next();
System.out.print("输入第" + (i + 1) + "个学生的分数:");
double fen = in.nextDouble();
bean.setName(name);
bean.setFen(fen);
data.add(bean);
}

Collections.sort(data, new Comparator<Bean>() {

public int compare(Bean o1, Bean o2) {
return (int) (o2.getFen() - o1.getFen());
}
});

for (int i = 0; i < data.size(); i++) {
System.out.println(data.get(i));
}
}
}

class Bean {

private String name;
private double fen;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public double getFen() {
return fen;
}

public void setFen(double fen) {
this.fen = fen;
}

@Override
public String toString() {
return name + ":" + fen;
}
}追问

你好,我的提问是结果要输出分数最高的和分数第二高的学生...谢谢...

追答

这个是做了排序,按从大到小,,,那么你取前两个就行了,,,,其他的方法也是硬代码死判断....那我再给你写个.

你把main替换下:
public static void main(String... _) {

Scanner in = new Scanner(System.in);

System.out.print("输入学生个数:");

int num = in.nextInt();
List data = new ArrayList();

for (int i = 0; i < num; i++) {
Bean bean = new Bean();
System.out.print("输入第" + (i + 1) + "个学生的姓名:");
String name = in.next();
System.out.print("输入第" + (i + 1) + "个学生的分数:");
double fen = in.nextDouble();
bean.setName(name);
bean.setFen(fen);
data.add(bean);
}

double max0 = Double.MIN_VALUE;
double max1 = Double.MIN_VALUE;
for (int i = 0; i < data.size(); i++) {
Bean bean = (Bean) data.get(i);
max0 = Math.max(bean.getFen(), max0);
}
for (int i = 0; i < data.size(); i++) {
Bean bean = (Bean) data.get(i);
if (max0 != bean.getFen()) {
max1 = Math.max(bean.getFen(), max1);
}
}

System.out.println("最高分:" + max0);
System.out.println("二高分:" + max1);
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-05-20
import java.util.*;

public class stu {
public static void main(String... _) {

Scanner in = new Scanner(System.in);

System.out.print("输入学生个数:");

int num = in.nextInt();
List data = new ArrayList();

for (int i = 0; i < num; i++) {
Bean bean = new Bean();
System.out.print("输入第" + (i + 1) + "个学生的姓名:");
String name = in.next();
System.out.print("输入第" + (i + 1) + "个学生的分数:");
double fen = in.nextDouble();
bean.setName(name);
bean.setFen(fen);
data.add(bean);
}

Collections.sort(data, new Comparator<Bean>() {

public int compare(Bean o1, Bean o2) {
return (int) (o2.getFen() - o1.getFen());
}
});

for (int i = 0; i < data.size(); i++) {
System.out.println(data.get(i));
}
}
}

class Bean {

private String name;
private double fen;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public double getFen() {
return fen;
}

public void setFen(double fen) {
this.fen = fen;
}

@Override
public String toString() {
return name + ":" + fen;
}
}追问

你好,我的提问是结果要输出分数最高的和分数第二高的学生,要比较大小的,并不是返回所有的学生和分数...谢谢...

追答

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;

public class test{

public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入学生数");
int s=sc.nextInt();
int[] a=new int[s];
System.out.println("请输入学生成绩以逗号隔开");
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
try {
String str=br.readLine();
String[] s1=str.split(",");
for(int i=0;imax){
max=a[j];
}
if(a[j]<min){
min=a[j];
}
sum+=a[j];
}
System.out.println("最高分数:"+max);
System.out.println("最低数"+min);
System.out.println("平均分数:"+sum/s);
}
}