我已经完成了一个代码,它读取一个文件,包括一些员工,工资和他们的排名,根据他们的排名,我们如何将奖金百分比添加到他们的工资......
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'
我不知道为什么
答案 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
是文本文件中的示例行,您的代码存在各种问题。
(phrases.equals("1")
。如果短语将等于您正在处理的当前行中的文本:Jame 900000 1
,此语句(以及其他两个语句相同)将永远不会返回true,因此永远不会计算奖金。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;
}
...
答案 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]
度过愉快的一天。