gpt4 book ai didi

Java StringTokenizer 和存储数组

转载 作者:行者123 更新时间:2023-12-01 15:06:12 26 4
gpt4 key购买 nike

我已经编写了一个 Worker 类和 Worker 的驱动程序类..我的工作类编译正常并显示所需的输出..但是在数组和 StringTokenizer 中我面临着主要问题......并且在 TestWorker.java32 行中有一个错误,我不知道为什么它给出问题是...

(i)声明一个数组,最多可存储 5 个由数据(名称、workerID 和 hourlyRate)构造的 Worker 对象的引用。

(ii)现在允许用户重复输入 worker ID 和工作时间,直到用户输入空字符串。读取这些值并在适当的对象上调用方法addWeekly()(通过搜索数组来定位具有指定 ID 的对象)。如果输入了不存在的 ID,则显示相应的错误消息。

(iii)计算并显示所有 worker 的工资

请参阅下面我的代码......

//Worker.java

public class Worker { 
public final double bonus=100;
protected String name, workerID;
protected double hourlyRate, totalHoursWorked,tax,grossSalary,netSalary;

public Worker(){

}
public Worker(String name, String workerID, double hourlyRate){
this.name = name;
this.workerID = workerID;
this.hourlyRate = hourlyRate;

}

public void addWeekly(double hoursWorked){
this.totalHoursWorked = this.totalHoursWorked + hoursWorked;
}

public double gross(){
grossSalary = (totalHoursWorked*hourlyRate);
if(totalHoursWorked>=150){
grossSalary = grossSalary +100;
}
return grossSalary;
}
public double netAndTax(){
netSalary = grossSalary;
if(grossSalary>500){
tax = (grossSalary - 500) *0.3;
netSalary = (grossSalary - tax);

}
return netSalary;
}
public String getName(){
return this.name;
}

public String getWorkerID(){
return this.workerID;
}

public double getHourlyRate(){
return this.hourlyRate;
}

public double getTotalHours(){
return totalHoursWorked;
}

public double getGrossSalary(){
return grossSalary;
}

public void addToGross(double amt){
grossSalary = grossSalary + amt;
}
public void displaySalary(){
System.out.print("Name: " +getName() + "\nID :" + getWorkerID()
+ "\nHourly Rate: " + getHourlyRate()+ "\nTotalHours Worked" + getTotalHours() +
"\nGross pay" + getGrossSalary() + "\nTax: " + netAndTax() +
"\nNet Pay: " + netAndTax());
}

}

//TestWorker.java

import java.util.Scanner;
import java.util.StringTokenizer;
public class TestWorker {
public static void main(String args[]){
Worker e = new Worker("John Major","s123",15.0);
e.addWeekly(45);
e.addWeekly(40);
e.addWeekly(32);
e.addWeekly(38);
e.gross();
e.netAndTax();
e.displaySalary();

Worker[] worklist = new Worker[5];
worklist[0] = new Worker("Richard Cooper","s1235",20.0);
worklist[1] = new Worker("John Major","s1236",18.0);
worklist[2] = new Worker("Mary Thatcher","s1237",15.0);
worklist[3] = new Worker("David Benjamin","s1238",16.0);
worklist[4] = new Worker("Jack Soo","s1239",25.0);

Scanner input = new Scanner(System.in);
String name;
double hourly;

do{
System.out.println("\n");
System.out.print("Please Enter ID and hours-worked in a given week: ");
name = input.nextLine();

StringTokenizer string = new StringTokenizer(name,"+");
String[] array =new String[(string.countTokens)];
for(int i=0;i<=4;i++){
if(array[0].equals(worklist[0])){
e.getName();
e.getWorkerID();
e.addWeekly(Double.parseDouble(array[0]));
e.gross();
e.displaySalary();

}
else if(array[0].equals(worklist[1])){
e.getName();
e.getWorkerID();
e.addWeekly(Double.parseDouble(array[1]));
e.gross();
e.displaySalary();
}

else if(array[0].equals(worklist[2])){
e.getName();
e.getWorkerID();
e.addWeekly(Double.parseDouble(array[2]));
e.gross();
e.displaySalary();
}

else if(array[0].equals(worklist[3])){
e.getName();
e.getWorkerID();
e.addWeekly(Double.parseDouble(array[3]));
e.gross();
e.displaySalary();
}

else if(array[0].equals(worklist[4])){
e.getName();
e.getWorkerID();
e.getHourlyRate();
e.addWeekly(Double.parseDouble(array[4]));
e.gross();
e.displaySalary();
}

else{
System.out.println("Please Enter correct information");
}

}

System.out.println();
while(string.hasMoreElements()){
System.out.println(string.nextElement());
}
}
while(name.isEmpty()==false);
}

}

最佳答案

首先,您已将 countTokens 指定为字段,而实际上它是此行中的一个方法:

String[] array = new String[(string.countTokens)]; // Incorrect
String[] array = new String[(string.countTokens())]; // Correct

现在您似乎正在将输入拆分为 + 符号?因此,您期望的输入类似于 s123+12,这意味着 ID s123 本周工作了 12 小时。因此,为了解决类似的问题,您可能需要一个如下所示的循环:

Scanner input = new Scanner(System.in);

System.out.println("\n");
System.out.print("Please Enter ID and hours-worked in a given week: ");
String enteredString = input.nextLine();

while (!enteredString.isEmpty()) {
StringTokenizer stringtok = new StringTokenizer(enteredString, "+");
String id = stringtok.nextToken();
Double hours = Double.parseDouble(stringtok.nextToken());

for (int i = 0; i < 5; i++) {
if (worklist[i].getWorkerID().equals(id)) {
worklist[i].addWeekly(hours);
break;
}
}

System.out.println("\n");
System.out.print("Please Enter ID and hours-worked in a given week: ");
enteredString = input.nextLine();
}

for (int i = 0; i < 5; i++) {
worklist[i].gross();
worklist[i].netAndTax();
worklist[i].displaySalary();
}

请记住,这非常粗糙,从您的说明中我并不完全清楚您到底想要实现什么目标。

关于Java StringTokenizer 和存储数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12916296/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com