Как добавить бонус? - PullRequest
0 голосов
/ 17 мая 2018

Я сделал код, который считывает файл, состоящий из числа сотрудников, зарплаты и их рейтинга, исходя из их рейтинга, как мы можем добавить бонусный процент к их зарплате ...

 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);
       double bonus;

       if(phrases.contains("1")){
          bonus=salary/0.03;
          System.out.println("Bonus: " + bonus);
       }else if(phrases.contains("2")){
          bonus=salary/0.08;
          System.out.println("Bonus: " + bonus);
       }else if(phrases.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());
 } 

Вывод:

 Jame   900000  1
 Bonus: 0.0
 Jane   60000   2
 Bonus: 0.0
 Don    866000  3
 Bonus: 0.0

Понятия не имею, почему

Ответы [ 3 ]

0 голосов
/ 17 мая 2018

Другие ответы, кажется, не учитывают тот факт, что ваша переменная salary всегда равна 0, таким образом, ваш bonus расчет, который зависит от вашего значения заработной платы, всегда будет 0.

Предполагая, что это: Jame 900000 1 - пример строки из вашего текстового файла, существуют различные проблемы с вашим кодом.

  1. Первая проблема: (phrases.equals("1"). Если фраза будет равна тексту в текущей строке, которую вы обрабатываете: Jame 900000 1, этот оператор (и то же самое для двух других) никогда не вернет true, поэтому бонус никогда не будет рассчитан.
  2. Вторая проблема заключается в том, что вы никогда не извлекаете значение salary.

Вам нужно будет заменить это:

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;
    }
    ...
0 голосов
/ 17 мая 2018

Если у вас есть файл 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] 

Хорошего дня.

0 голосов
/ 17 мая 2018

Вы проверяете условие с помощью метода 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())

Вы можете получить третий параметр, используя содержит или split метод. Пожалуйста, проверьте этот учебник: 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());
        } 
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...