异常处理与文本IO 习题12_24&12_25

12_24:创建大的数据集:创建一个具有1000行的数据文件。文件中的每行包含了一个教职员工的姓、名、级别以及薪水,第i行的教职员工的姓和名为FristNamei 和LastNamei。级别随机产生为assistant、associate、full。薪水为随机产生的数字,并且小数点后保留两位数字。对于助理教授而言,薪水应该在50000到80000的范围内,对于副教授为60000到110000。对于正教授为75000到130000。保存文件为Salary.txt.

package Pe12_24;
import java.io.File;
import java.io.PrintWriter;
public class Exception12_24 {
    public static void main(String[] args) throws Exception {
        String strGardeName = null;
        StringBuilder sb1 = new StringBuilder();
        File tagartFile = new File(args[0]);
        try (PrintWriter pw = new PrintWriter(tagartFile);) {
            for (int i = 1; i <= 1000; i++) {
                sb1.append("FristName" + i + " LastName" + i);
                strGardeName = getGradeName((int) (Math.random() * 2 + 1));
                sb1.append(" "+strGardeName);
                sb1.append(" "+getSalary(strGardeName));
                pw.println(sb1.toString());
                sb1.delete(0, sb1.length());
            }
        }
    }
    //隨機產生教職員工級別
    public static String getGradeName(int i) {
        String strName = null;
        if (i > 3 || i < 1) {
            System.out.println("Uage:getGarde Error.");
            System.exit(1);
        }
        switch (i) {
        case 1:
            return strName = "assistant";
        case 2:
            return strName = "associate";
        case 3:
            return strName = "full";
        }
        return strName;
    }
//隨機產生教職員工薪水,返回整數的字符串形式。
    public static String getSalary(String gardeName) {
        String strSalary = null;
        double salary = 0;
        if (!(gardeName.equalsIgnoreCase("assistant") || gardeName.equalsIgnoreCase("associate")
                || gardeName.equalsIgnoreCase("full"))) {
            System.out.println("Uage: getSalary Error");
            System.exit(2);
        }
        if (gardeName.equalsIgnoreCase("assistant")) {
            salary = Math.random() * 30000 + 50000;
        } else if (gardeName.equalsIgnoreCase("associate")) {
            salary = Math.random() * 50000 + 60000;
        } else if (gardeName.equalsIgnoreCase("full")) {
            salary = Math.random() * 55000 + 75000;
        }
        strSalary = String.valueOf(salary);
        System.out.println(strSalary);
        int index = strSalary.indexOf('.');
        strSalary = strSalary.substring(0, index + 3);
        return strSalary;
    }
}

**总结:
1、在写入文本的过程中,是使用了StringBuilder来处理字符串,主要就是因为StringBuilder在处理字符串时比较方便。
2、在随机产生教职员工级别的判断上,是采用了Math.random()的方法来随机产生‘1’、‘2’、‘3’来判断返回教职员工的级别。
3、在根据教职员工的级别来随机产生工资薪水的方法上是采用了String.equalsIgnoreCase()方法来判定教职员工的类别,从而使用Math.random()来随机产生规定范围内的工资薪水。**

12_25:一个大学将其教职员工的薪水发布在http://cs.strong.edu/liang/Salary.txt中。文件中的每行包含一个教职员工的姓、名、级别以及薪水。编写一个程序,分别显示助理教授、副教授、正教授,所有教职员工各个类别的总薪水,以及上诉类别的平均薪水。

package Pe12_25;

import java.net.URL;
import java.util.Scanner;

public class Exception12_25 {
    public static void main(String[] args) throws Exception {
        double salary_assistant = 0;
        int count_assistant = 0;
        double salary_associate = 0;
        int count_associate = 0;
        double salary_full = 0;
        int count_full = 0;
        double salary_quantity = 0;
        URL StringURL = new URL("http://cs.armstrong.edu/liang/data/Salary.txt");
        String string_line = null;
        try (Scanner input = new Scanner(StringURL.openStream());) {
            while (input.hasNext()) {
                string_line = input.nextLine();
                //分隔字符串
                String[] strings = string_line.split(" ");
                //將字符串數組最後一項表示工資薪水的轉化成整數。
                salary_quantity = Double.valueOf(strings[strings.length - 1]);
                //對各個級別的工資和人數進行統計。
                if (strings[strings.length - 2].equalsIgnoreCase("assistant")) {
                    salary_assistant += salary_quantity;
                    count_assistant++;
                } else if (strings[strings.length - 2].equalsIgnoreCase("associate")) {
                    salary_associate += salary_quantity;
                    count_associate++;
                } else if (strings[strings.length - 2].equalsIgnoreCase("full")) {
                    salary_full += salary_quantity;
                    count_full++;
                }string_line = null;
            }

            System.out.printf("Assistant,count is %d, sum_salary is %.2f,average_salary:%.2f",count_assistant,salary_assistant,salary_assistant/count_assistant);
            System.out.println();
            System.out.printf("Accocite,count is %d, sum_salary is %.2f,average_salary:%.2f",count_associate,salary_associate,salary_associate/count_associate);
            System.out.println();           
            System.out.printf("Assistant,count is %d, sum_salary is %.2f,average_salary:%.2f",count_full,salary_full,salary_full/count_full);
            System.out.println();
            }

    }
}

*总结:
1、在读取一行字符串时,分别取出字符串中单独的字符串,使用String.split()以空格作为分隔标志,然后再对单独的字符串进行处理。*

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值