-1

问题是:一所大学在http://cs.armstrong.edu/liang/data/Salary.txt上公布了员工的工资。文件中的每一行都包含一个教员的

  • 名,
  • 姓,
  • 秩,
  • 和工资。

编写程序显示总工资

  • 助理教授,
  • 副教授,
  • 正教授,
  • 和所有教职员工,

并显示平均工资

  • 助理教授,
  • 副教授,
  • 正教授,
  • 和所有教职员工。

到目前为止我的代码:

import java.util.Scanner;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
public class Salary {
    public static void main(String[] args) throws MalformedURLException{
        URL salary = new URL("http://cs.armstrong.edu/liang/data/Salary.txt");
        try{
            Scanner read = new Scanner(salary.openStream());
            while(read.hasNextLine()){
                String line = read.nextLine();
                System.out.println(line); //Testing to see if the URL works
            }
            read.close();
        } catch(IOException e){
            e.getStackTrace();
        }
    }
}

我希望我能做的是从每一行文本创建对象,然后根据它们的等级将它们组合在一起,然后从那里开始,但是,老实说,我真的不知道如何在我的生活中做到这一点。我想一旦我按照我想要的方式将所有内容组合在一起,那么我应该能够找出其余的,但我不确定我是否应该在主要方法中完成所有这些。任何帮助,将不胜感激。

4

3 回答 3

1

不打算做你的作业,但这可能会帮助你:

  • line.split("\\s")确实将行拆分为一个字符串数组,由空格分隔。
  • Double.valueOf(string)将字符串转换为双精度。如果字符串实际上不是数字,将抛出异常。
  • 然后 - 正如您已经建议的那样 - 将结果放入不可变数据类中以便于处理应该可以解决问题。
于 2013-10-11T23:20:51.800 回答
0

从您的问题描述来看,我认为您并不真正关心教职员工的姓名。在这种情况下,对于您的问题,我建议您使用从键映射到数组列表的 HashMap。就像是

HashMap<String, ArrayList<Float>> hs = new HashMap<String, ArrayList<Float>>();

key可以是教师类型,即助理教授、副教授、正教授等,并且在 arraylist 中存储薪水,因此当您必须计算总薪水、平均薪水时,您只需要在单个 arraylists 上执行这些操作,这很好且容易去做。您可以.split(" ")在阅读时使用方法从行中提取各个部分,并且由于所有行的格式相似,因此不会中途中断。

于 2013-10-11T23:25:51.137 回答
0

好吧,我认为您可能在将数据从 String 转换为 Double 时遇到问题。在我看来,为什么不在while循环中处理数据呢?如

String first_name,last_name,rank;
double salary;
first_name=read.next();
last_name=read.next();
rank=read.next;
salary=read.next_Double();

//定义应该放在while循环之外(文本中不允许next()double,使用next_Double来sub)然后你得到你想要的数据,你可以很容易地处理它。希望这可以帮到你。

于 2013-10-12T00:48:02.260 回答