【问题标题】:Calculating total and average salary计算总工资和平均工资
【发布时间】:2013-10-11 23:11:02
【问题描述】:

问题是:一所大学将其员工的工资发布在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();
        }
    }
}

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

【问题讨论】:

    标签: java url io java.util.scanner


    【解决方案1】:

    不打算做你的功课,但这可能会对你有所帮助:

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

    【讨论】:

      【解决方案2】:

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

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

      您的key 可以是教师类型,即助理教授、副教授、正教授等,并且在数组列表中存储工资,因此当您必须计算总工资、平均工资时,您只需对个人执行这些操作arraylists 很好而且很容易做到。您可以在阅读时使用.split(" ") 方法从行中提取各个部分,因为所有行的格式都相似,因此不会中途中断。

      【讨论】:

        【解决方案3】:

        好吧,我认为您可能在将数据从 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) 然后你得到你想要的数据,你可以很容易地处理它。 希望对您有所帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-04-03
          • 1970-01-01
          • 2021-05-09
          • 2019-01-25
          • 1970-01-01
          • 1970-01-01
          • 2020-08-09
          • 2021-09-09
          相关资源
          最近更新 更多