求助一个不用数组的方法编写的程序. 不用数组可以用集合定义一个Student类,包括姓名,得分等属性用一个集合如List<Student>保存数据之后的统计就不说了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 List<Student> 然后 实现 Comparator 接口进行元素排序 package big;import java.util.Scanner;class Student{ String name; int score; public void read() { Scanner input = new Scanner(System.in); name = input.next(); score = input.nextInt(); } public void print() { System.out.println(name + " " + score); } public void give(Student stu) { this.name = stu.name; this.score = stu.score; }}class Re{ public static void main(String[] args) { int n; Scanner input = new Scanner(System.in); n = input.nextInt(); Student a = new Student(); Student b = new Student(); Student tmp = new Student(); a.read(); //System.out.println(a.name); for (int i = 0; i < n - 1; ++i) { tmp.read(); if (tmp.score > b.score) { if (tmp.score > a.score) { b.give(a); a.give(tmp); } else { b.give(tmp); } } } System.out.println(); a.print(); b.print(); }}练手了。。 可以用链表嘛,class Student{ private Student nextStu; private String name; private float score; ........}不过这样的话查询的效率会很低。用数组查询的效率会比较高。用集合类会很方便的。 写个了用Map实现的:import java.util.*;import java.util.regex.MatchResult;public class Transcript { public static void main(String[] args) { final int num; TreeMap<Float, String> map = new TreeMap<Float, String>(); System.out.print("输入学生人数:"); Scanner scanner = new Scanner(System.in); num = scanner.nextInt(); for(int i = 0; i < num; i++) { System.out.print("输入学生" + (i + 1) + " 姓名和分数:"); scanner = new Scanner(System.in); String pattern = "(\\p{InCJK Unified Ideographs}+)" + "(\\d+)"; scanner.next(pattern); MatchResult match = scanner.match(); float score = Float.parseFloat(match.group(2)); String name; if(map.containsKey(score)) name = map.get(score) + ", " + match.group(1); else name = match.group(1); map.put(score, name); } String first = "1." + map.get(map.lastKey()) + ": " + map.lastKey() + "\n"; String second = "2." + map.get(map.lowerKey(map.lastKey())) + ": " + map.lowerKey(map.lastKey()); System.out.println(first + second); }} 我是java初学者,这个程序要求只用一个简单的main()方法,用循环语句编写。 只用main的方法:1、定义一个student对象,属性你题目里给出了2、main里面定义两个student对象的变量,记录最高/第二高的3、对于每个用户的输入,按规则和前面两个变量比较 a、比最高高的,第二高==最高,最高==新输入 b、比最高低,比第二高高的,第二高=新输入 c、都低的,不管4、输出最高/第二高 public static void main(String[] args) { Scanner input = new Scanner(System.in); int n = 0; while (n < 1){ try{ n = input.nextInt(); } catch(Exception e){ n = 0; } } String name1 = ""; int score1 = 0; String name2 = ""; int score2 = 0; for (int i = 0; i < n; ){ String line = input.nextLine(); String currentName = line.split(" ")[0]; int currentScore = 0; try { currentScore = Integer.parseInt(line.split(" ")[1]); } catch (Exception e){ continue; } if (currentScore > score1){ score2 = score1; name2 = name1; score1 = currentScore; name1 = currentName; } else if (currentScore > score2){ score2 = currentScore; name2 = currentName; } i+=1; } System.out.printf("%s %d\r\n%s %d", name1, score1,name2, score2); } 既然是初学,我写了个简单的,实际应用要加上对输入数据的检测。import java.util.*;public class Test1{ public static void main(String args[]) { Scanner scan = new Scanner(System.in); System.out.print("输入学生人数:"); int n = scan.nextInt(); String name="",nameTop="",nameTop2=""; int score=0,scoreTop=0,scoreTop2=0; for (int i=0; i<n; i++) { System.out.print("输入学生" + (i + 1) + " 姓名:"); name = scan.next(); System.out.print("输入学生" + (i + 1) + " 分数:"); score = scan.nextInt(); if(score>scoreTop){ scoreTop=score; nameTop=name; } if(score>scoreTop2 && score<scoreTop){ scoreTop2=score; nameTop2=name; } } System.out.printf("最高分姓名 %s 成绩 %d\n",nameTop,scoreTop); System.out.printf("第二高分姓名 %s 成绩 %d",nameTop2,scoreTop2); }} 改了改,应如下:import java.util.*;public class Test1{ public static void main(String args[]) { Scanner scan = new Scanner(System.in); System.out.print("输入学生人数:"); int n = scan.nextInt(); String name="",nameTop="",nameTop2=""; int score=0,scoreTop=0,scoreTop2=0; for (int i=0; i<n; i++) { System.out.print("输入学生" + (i + 1) + " 姓名:"); name = scan.next(); System.out.print("输入学生" + (i + 1) + " 分数:"); score = scan.nextInt(); if(score>scoreTop){ scoreTop2=scoreTop;nameTop2=nameTop; scoreTop=score;nameTop=name; } else if(score>scoreTop2) {scoreTop2=score;nameTop2=name;} } System.out.printf("前两名是 姓名 %s 成绩 %d\n 姓名 %s 成绩 %d",nameTop,scoreTop,nameTop2,scoreTop2); }} 父类的构造函数到底能不能被继承??? JFileChooser 保存文件时文件名为*?出错 向数据库添加数据时,连接字符串中的问题 求求你们进来拿分~~ java文件读写问题 现在来学数据结构 谁能给我一个oracle8.0的JDBC驱动程序 Exception in thread "main" java.lang.NoClassDefFoundError: mypag/Time 哪位大哥帮帮小弟,这个问题我搞了一个下午了!!!SOS 要学多久可以考SCJP考试??那东西有用吗?? 这个怎么实现? 实用数据库查出来的数据静态实例化一个类 登陆系统中下拉列表选择跳转问题
{
String name;
int score; public void read()
{
Scanner input = new Scanner(System.in);
name = input.next();
score = input.nextInt();
} public void print()
{
System.out.println(name + " " + score);
} public void give(Student stu)
{
this.name = stu.name;
this.score = stu.score;
}
}class Re
{
public static void main(String[] args)
{
int n;
Scanner input = new Scanner(System.in);
n = input.nextInt(); Student a = new Student();
Student b = new Student();
Student tmp = new Student();
a.read();
//System.out.println(a.name);
for (int i = 0; i < n - 1; ++i)
{
tmp.read(); if (tmp.score > b.score)
{
if (tmp.score > a.score)
{
b.give(a);
a.give(tmp);
}
else
{
b.give(tmp);
}
}
} System.out.println();
a.print();
b.print();
}
}
练手了。。
class Student{
private Student nextStu;
private String name;
private float score;
........
}
不过这样的话查询的效率会很低。
用数组查询的效率会比较高。
用集合类会很方便的。
import java.util.*;
import java.util.regex.MatchResult;public class Transcript {
public static void main(String[] args) {
final int num;
TreeMap<Float, String> map = new TreeMap<Float, String>();
System.out.print("输入学生人数:");
Scanner scanner = new Scanner(System.in);
num = scanner.nextInt();
for(int i = 0; i < num; i++) {
System.out.print("输入学生" + (i + 1) + " 姓名和分数:");
scanner = new Scanner(System.in);
String pattern = "(\\p{InCJK Unified Ideographs}+)" + "(\\d+)";
scanner.next(pattern);
MatchResult match = scanner.match();
float score = Float.parseFloat(match.group(2));
String name;
if(map.containsKey(score))
name = map.get(score) + ", " + match.group(1);
else
name = match.group(1);
map.put(score, name);
}
String first = "1." + map.get(map.lastKey()) + ": " + map.lastKey() + "\n";
String second = "2." + map.get(map.lowerKey(map.lastKey())) + ": " +
map.lowerKey(map.lastKey());
System.out.println(first + second);
}
}
1、定义一个student对象,属性你题目里给出了
2、main里面定义两个student对象的变量,记录最高/第二高的
3、对于每个用户的输入,按规则和前面两个变量比较
a、比最高高的,第二高==最高,最高==新输入
b、比最高低,比第二高高的,第二高=新输入
c、都低的,不管
4、输出最高/第二高
Scanner input = new Scanner(System.in);
int n = 0;
while (n < 1){
try{
n = input.nextInt();
} catch(Exception e){
n = 0;
}
}
String name1 = "";
int score1 = 0;
String name2 = "";
int score2 = 0;
for (int i = 0; i < n; ){
String line = input.nextLine();
String currentName = line.split(" ")[0];
int currentScore = 0;
try {
currentScore = Integer.parseInt(line.split(" ")[1]);
} catch (Exception e){
continue;
}
if (currentScore > score1){
score2 = score1;
name2 = name1;
score1 = currentScore;
name1 = currentName;
}
else if (currentScore > score2){
score2 = currentScore;
name2 = currentName;
}
i+=1;
}
System.out.printf("%s %d\r\n%s %d", name1, score1,name2, score2);
}
import java.util.*;
public class Test1
{
public static void main(String args[])
{
Scanner scan = new Scanner(System.in);
System.out.print("输入学生人数:");
int n = scan.nextInt();
String name="",nameTop="",nameTop2="";
int score=0,scoreTop=0,scoreTop2=0;
for (int i=0; i<n; i++) {
System.out.print("输入学生" + (i + 1) + " 姓名:");
name = scan.next();
System.out.print("输入学生" + (i + 1) + " 分数:");
score = scan.nextInt();
if(score>scoreTop){
scoreTop=score;
nameTop=name;
}
if(score>scoreTop2 && score<scoreTop){
scoreTop2=score;
nameTop2=name;
}
}
System.out.printf("最高分姓名 %s 成绩 %d\n",nameTop,scoreTop);
System.out.printf("第二高分姓名 %s 成绩 %d",nameTop2,scoreTop2);
}
}
public class Test1
{
public static void main(String args[])
{
Scanner scan = new Scanner(System.in);
System.out.print("输入学生人数:");
int n = scan.nextInt();
String name="",nameTop="",nameTop2="";
int score=0,scoreTop=0,scoreTop2=0;
for (int i=0; i<n; i++) {
System.out.print("输入学生" + (i + 1) + " 姓名:");
name = scan.next();
System.out.print("输入学生" + (i + 1) + " 分数:");
score = scan.nextInt();
if(score>scoreTop){
scoreTop2=scoreTop;nameTop2=nameTop;
scoreTop=score;nameTop=name;
}
else if(score>scoreTop2) {scoreTop2=score;nameTop2=name;}
}
System.out.printf("前两名是 姓名 %s 成绩 %d\n 姓名 %s 成绩 %d",nameTop,scoreTop,nameTop2,scoreTop2);
}
}