如何添加奖金?

时间:2018-05-17 04:04:33

标签: java file

我已经完成了一个代码,它读取一个文件,包括一些员工,工资和他们的排名,根据他们的排名,我们如何将奖金百分比添加到他们的工资......

3

输出:

a:
  b:
    - map1: 
       '3000':
        map2:
           '3000': 'true'
           '3010': 'true'
           '4000': 'true'
           '4300': 'true'
           '3300': 'true'
           '3400': 'true'
           '3700': 'true'
           '4600': 'true'
           '4700': 'true'
       '3010':
        map2:
           '3000': 'true'
           '3010': 'true'
           '4000': 'true'
           '4300': 'true'
           '3300': 'true'
           '3400': 'true'
           '3700': 'true'
           '4600': 'true'
           '4700': 'true'

我不知道为什么

3 个答案:

答案 0 :(得分:0)

您使用equals方法检查条件,但您的短语变量包含不同的值,而不是1,2,3,这就是您获得奖金0的原因。

if(phrases.contains("1")){
       bonus=salary/0.03;

}else if(phrases.contains("2")){
       bonus=salary/0.08;

}else if(phrases.contains("3")){
        bonus=salary/0.20;
}

或者您可以使用以下命令获取最后一个参数:

phrases.substring(phrases.length()-1, phrases.length())

您可以使用包含拆分方法获取第三个参数。 请查看本教程:https://www.tutorialspoint.com/java/java_string_split.htm

还有一件事你的薪水总是零(0)。请更正

我在这里发布了完整的代码:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

class SubClass{
    public static void main(String[] args) {
        String phrases;  
        int salary=0;
        try {
            FileReader in = new FileReader("bonus.txt"); 
            BufferedReader readFile = new BufferedReader(in);   
            while ((phrases = readFile.readLine()) != null) {   
                    System.out.println(phrases);
                    phrases = phrases.trim().replaceAll("[ ]{2,}", " ");
                    String splitStr [] = phrases.split(" "); 
                    double bonus;
                    salary = Integer.parseInt(splitStr[1]);
                    if(splitStr[2].contains("1")){
                        bonus=salary/0.03;
                        System.out.println("Bonus: " + bonus);

                 }else if(splitStr[2].contains("2")){
                        bonus=salary/0.08;
                        System.out.println("Bonus: " + bonus);

                 }else if(splitStr[2].contains("3")){
                         bonus=salary/0.20;
                         System.out.println("Bonus: " + bonus);

                 }

                 // System.out.println();
                }
            readFile.close();
            in.close(); 
        }catch (IOException e) {        
            System.out.println("Problem reading file.");
                System.err.println("IOException: " + e.getMessage());
        } 
    }
}

答案 1 :(得分:0)

其他答案似乎无法满足您的salary变量始终为0,因此,您的bonus计算,取决于薪水总值为0。

假设:Jame 900000 1是文本文件中的示例行,您的代码存在各种问题。

  1. 第一个问题是:(phrases.equals("1")。如果短语将等于您正在处理的当前行中的文本:Jame 900000 1,此语句(以及其他两个语句相同)将永远不会返回true,因此永远不会计算奖金。
  2. 第二个问题是您永远不会提取salary值。
  3. 您需要替换它:

    while ((phrases = readFile.readLine()) != null) {   
        System.out.println(phrases);
        if(phrases.equals("1")){
    

    有这样的事情:

    while ((phrases = readFile.readLine()) != null) {   
        System.out.println(phrases);
        String[] employeeData = phrases.split("\\t");   //This assumes that your data is split by tabs.
        salary = Double.parse(employeeData[1]);
        if("1".equals(employeeData[2])) {
            bonus = salary * 0.03;
        }
        ...
    

答案 2 :(得分:0)

如果你有一个employeeBonus.txt文件,如下所示。

Jame    900000  2
Jane    60000   1
Don     866000  3

我认为你将有三个标记作为字符串,所以你可以使用stringtokenizer类来获得薪水和成绩。

文件的第一行是

Jame    900000  2

,编码字符串的结果是

Jame%20%20%20%20900000%092

我终于发现文本文件的内容通过URL编码与空格和制表符混合在一起。

因此,此类型的用法如下,

StringTokenizer stTok = new StringTokenizer(phrase, " \t");

从第三和第二令牌中获取工资和奖金值的标识符。

name = stTok.nextToken(); //first token
salary = Integer.valueOf(stTok.nextToken()).intValue(); //second token
grade = stTok.nextToken();

[源代码]

package com.tobee.tests.inout;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.StringTokenizer;

public class CheckBounsFromFile {
    public static void main(String[] args) {
        String name, phrase, grade;
        double bonus = 0;
        int salary = 0;
        BufferedReader readFile = null;
        try {
            readFile = new BufferedReader(new FileReader("resource/aa/employeeBonus.txt"));

            while ((phrase = readFile.readLine()) != null) {
                //System.out.println(phrase);

                StringTokenizer stTok = new StringTokenizer(phrase, " \t");

                name = stTok.nextToken();

                salary = Integer.valueOf(stTok.nextToken()).intValue();

                grade = stTok.nextToken();

                if(grade!= null && !grade.equals(""))
                {
                    if (grade.equals("1")) {
                        bonus = salary / 0.03;
                    } else if (grade.equals("2")) {
                        bonus = salary / 0.08;

                    } else if (grade.equals("3")) {
                        bonus = salary / 0.20;
                    }

                    System.out.printf("name[%s]salary[%d]Bonus[%f] \n",name, salary, bonus);
                }

            }

        } catch (IOException e) {
            System.out.println("Problem reading file.");
            System.err.println("IOException: " + e.getMessage());
        }
        finally
        {
            try {
                readFile.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

    }
}

[结果]

name[Jame]salary[900000]Bonus[30000000.000000] 
name[Jane]salary[60000]Bonus[750000.000000] 
name[Don]salary[866000]Bonus[4330000.000000] 

度过愉快的一天。