2013-10-11 132 views
-2

问题是:一所大学的员工薪水为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(); 
     } 
    } 
} 

我希望我可以做的是创建基于文本的每一行的对象,然后将它们组合在一起,根据他们的排名,并从那里走,然而,我真的不知道如何为我的生活做到这一点。我认为,一旦我按照我想要的方式将所有事情组合在一起,那么我应该能够找出其他问题,但我不确定是否应该在主要方法中完成所有这些工作。任何帮助,将不胜感激。

回答

1

不会做你的功课,但是这可能会帮助您:

  • line.split("\\s")并线分割成String数组,用空格隔开。
  • Double.valueOf(string)将字符串转换为双精度型。如果字符串实际上不是数字,将抛出异常。
  • 然后 - 正如你已经建议的 - 把结果放在不可变的数据类中以便于处理应该可以做到。
0

从你的问题描述我不认为你真的关心教员的名字。在这种情况下,对于你的问题,我建议你使用HashMap,它将一个键映射到一个数组列表。像

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

key可以教员即类型助理教授,副教授,正教授等,并在arraylist中存储工资,因此当您需要计算总薪金时,您只需对单个数组列表进行这些操作即可获得平均薪资,这些操作既好又易。您可以使用.split(" ")方法在读取时从行中提取各个部分,并且所有行的格式与其中途不会中断相似。

0

嗯,我想你可能在将数据从字符串转换为双精度时遇到问题。 在我看来,为什么不在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()的双没有在文中允许使用next_Double分) 那么你得到你想要的数据,你可以轻松处理它。希望这可以帮助你。