要验证的用户输入值代码

时间:2014-03-15 00:00:28

标签: java validation

在我的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;
}

如果这个问题的格式很可怕,请原谅我,因为我对堆栈溢出还很新。

1 个答案:

答案 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 :)