当前位置:编程学习 > JAVA >>

求学过JAVE程序员帮忙解答一下!(有分析过程最好)

编写程序读取一个数据文件,该文件内容包括每个学生的GPA以及学生的姓名。程序将输出最高的GPA以及获得这个GPA的所有学生名单。程序仅对输入文件扫描一次。提示:可用栈保存获得当前最高GPA的所有学生的名单。
输入 程序读取数据文件,该文件包含每个学生的GPA及学生姓名。示例数据如下所示:
3.5 Bill
3.6 John
2.7 Lisa
3.9 Kathy
3.4 Jason
3.9 David
3.4 Jack
输出 最高GPA以及获得该GPA的所有学生姓名。例如,对于如上所示数据,最高GPA是3.9,获得该GPA的学生是Kathy和David。
另一个输入文件(可用Windows记事本保存委GPAData.txt):
3.4 Holt
3.2 Bolt
2.5 Colt
3.4 Tom
3.8 Ron
3.8 Mickey
3.6 Pluto
3.5 Donald
3.8 Cindy
3.7 Dome
3.9 Andy
3.8 Fox
3.9 Minne
2.7 Goofy
3.9 Doc
3.4 Danny


--------------------编程问答-------------------- 遍历一遍将最大值压栈不就好了 --------------------编程问答-------------------- 我没学过JAVE的!这位先生可以帮忙解答下吗?! --------------------编程问答--------------------
引用 2 楼  的回复:
我没学过JAVE的!这位先生可以帮忙解答下吗?!

连JAVA都打错了。 --------------------编程问答-------------------- GPAData.txt跟下面的java程序在同一个目录下面。。楼主我怕运行不起来。

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Stack;

public class Test{
public static void main(String[] args) throws IOException {
FileReader fr = new FileReader(new File("GPAData.txt"));
BufferedReader br = new BufferedReader(fr);
String str = null;
Stack<String[]> stack = new Stack<String[]>();
double maxGPA = 0;
while((str=br.readLine())!= null){
String[] temp = str.split("\\s+");
if(stack.size() == 0){
stack.push(temp);
maxGPA = Double.valueOf(temp[0]);
}
else if(stack.peek()[0].equals(temp[0])){//相等直接压栈
stack.push(temp);
}
else if(Double.valueOf(stack.peek()[0]) < Double.valueOf(temp[0])){//如果不相等
maxGPA = Double.valueOf(temp[0]);
stack.clear();
stack.push(temp);
}
}
System.out.print(maxGPA);
while(stack.size()!=0){
System.out.print("\t"+stack.pop()[1]);
}
br.close();
}

}
--------------------编程问答-------------------- 谢谢了
补充:Java ,  Java相关
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,