在我的CIS 220 Java Application 2类中,我们刚刚使用了构造函数等对象和类的使用。此任务的整个目标是利用类及其方法来获取用户员工数据。我觉得我或多或少完成了整个事情,但还有最后一部分。必须验证数据,如此屏幕截图链接http://puu.sh/7vzeI.jpg
中所述我认为员工ID需要长度为9个字符作为字符串。工资和工作时间必须是双倍的。遗憾的是,我不知道我需要什么样的代码才能在课堂上验证它。我认为这是一个循环但它似乎没有效果。
这是主要的java方法:
public class Project3 {
static Scanner console = new Scanner (System.in);
public static void main(String[] args) {
Employee worker1 = new Employee();
worker1.getEmployeeName();
worker1.getEmployeeNum();
worker1.getPayRate();
worker1.getEmployeeHours();
System.out.println("Employee Name: " + worker1.printEmployeeName());
System.out.println("Employee ID: " + worker1.printEmployeeNum());
System.out.println("Pay Rate: $" + worker1.printPayRate());
System.out.println("Hours Worked: " + worker1.printHoursWorked());
worker1.getNetPay();
}
}
这些是标题为" Employee"的课程中的方法。主要使用的是:
public String getEmployeeName()
{
System.out.println("Please enter the employee's name: ");
employeeName = console.nextLine();
return employeeName;
}
// Method that prompts the user to enter their hours worked, then returns it as the reference
public double getEmployeeHours()
{
System.out.println("Enter the number of hours worked(a numeric value between 0.0 and 100.0): ");
hoursWorked = console.nextDouble();
return hoursWorked;
}
// Method that prompts the user to enter their employee ID, then returns it as the reference
public String getEmployeeNum ()
{
System.out.println("Please enter the employee's ID: ");
employeeNum = console.nextLine();
return employeeNum;
}
// Method that prompts the user to enter their pay rate, then returns it as the reference
public double getPayRate()
{
System.out.println("Please enter the employee's pay rate (a numeric value): ");
payRate = console.nextDouble();
return payRate;
}
如果这个问题的格式很可怕,请原谅我,因为我对堆栈溢出还很新。
答案 0 :(得分:0)
我认为你可能不清楚返回方法的概念。如果您不打算在任何时候使用返回值,那么制作返回方法毫无意义。例如
public String getEmployeeName()
{
System.out.println("Please enter the employee's name: ");
employeeName = console.nextLine();
return employeeName;
}
// in the other class
worker1.getEmployeeName();
你永远不会分配字符串" worker1.getEmployeeName()"什么使得这个返回声明是没用的。我要做的是,我将删除getter方法aka" worker1.printEmployeeName()"而是这样做:
String name = worker1.printEmployeeName();
System.out.println("Employee Name: " + name);
然后在方法" printEmployeeName()"我会添加检查以查看输入是否有效。像这样:
(我不认为该名称可能有无效的输入,除非它可能是null,所以我将使用该数字。)
好的,为了验证我会这样做的信息:
public String getEmployeeNum ()
{
while(true)
{
System.out.println("Please enter the employee's ID: ");
try{
employeeNum = console.nextInt(); //this should be getting an integer not the line
}catch(Exception e){
employeeNum = 0;
}
if(String.valueOf(employeeNum).length() == 9)
return String.valueOf(employeeNum); // this will break you out of your loop and return the value
else{
System.out.println("Invalid input...");
continue;
}
}
}
现在我将尝试解释上面的代码
因为我们正在使用" console.nextInt();"为了检查用户输入的是不是字符串,双精度或其他任何不是整数的我使用了try catch语句。如果您不熟悉try catch的工作原理,它基本上会检查"中的代码是否有错误。试试{}"部分,如果有什么在" catch(例外e){}"块。我可以进一步了解它,但现在已经足够解释了。因此,如果输入存在问题,或者我们发现错误"用它我们将employeeNum设置为" 0" (你将在下一部分看到原因)。
然后我们转到if语句" if(String.valueOf(employeeNum)。length()== 9)"基本上这会把我们的输入变成一个字符串,所以我们可以检查长度(记住如果输入有一个错误,则employeeNum将是" 0"长度为" 1")
如果输入有效(9个数字长),我们返回它"返回employeeNum;"
如果它无效(不够长或太长),我们告诉用户存在错误,我们重新启动该过程。
我希望这有助于一些或至少让您了解下一步该做什么!
如果您想阅读并了解更多信息:
尝试抓住:http://docs.oracle.com/javase/tutorial/essential/exceptions/try.html
编辑:(提示) 当您检查值是否为付费率和小时数的两倍时,请使用以下内容:
try {
hoursWorked = console.nextDouble();
}catch(Exception e){
hoursWorked = -1.0;
}
if(hoursWorked > 0.0)
return hoursWorked;
// the end should be the same as the other example :)