好的。所以我有这个叫做#34; PayrollDemo"的课程,它使用了一个名为" Payroll"的课程。我已经设置了几个异常类来管理某些异常,现在我只需要弄清楚如何抛出这些异常。
我想,我应该通过一系列if语句执行此操作,该语句检查为正确标准输入的每个字段。问题是,由于异常处理与我工作的不同,所以我不知道如何抛出它。
所以我在这里确保名称字符串不是空的,如果它应该导致一个名为" InvalidNameException"的异常。并将其抛给" InvalidNameException"我在与#34; PayrollDemo"相同的文件夹中的课程类。
public class PayrollDemo
{
public static void main(String[] args)
{
Payroll pr = new Payroll ("Test Name", 234);
System.out.println("Current Employee Information. \n");
System.out.println("Name: " + pr.getName());
System.out.println("ID: " + pr.getID());
System.out.println("Hourly Pay Rate: " + pr.getHourlyPayRate());
System.out.println("Number Hours Worked: " + pr.getNumHoursWorked());
System.out.println("Gross Pay: $" + pr.calculateGrossPay() + "\n");
System.out.println("Welcome to the payroll screen. \n");
Scanner keyboard = new Scanner(System.in);
System.out.print("Please enter a name: ");
String newName = keyboard.nextLine();
System.out.print("Please enter an ID: ");
int newID = keyboard.nextInt();
pr.setID(newID);
System.out.print("Please enter an hourly pay rate: ");
double newPayRate = keyboard.nextDouble();
pr.setHourlyPayRate(newPayRate);
System.out.print("Please enter the number of hours worked: ");
int newHours = keyboard.nextInt();
pr.setNumHoursWorked(newHours);
if (newName == "")
{
throw new InvalidNameException();
}
else
{
pr.setName(newName);
}
这是InvalidNameException
public class InvalidNameException extends Exception
{
/**
No-arg constructor
*/
public InvalidNameException()
{
super("Invalid name");
}
}
答案 0 :(得分:1)
您正在正确抛出异常。但是你从main()
扔掉它。因此,它将导致执行main()
立即终止异常,这意味着程序将打印堆栈跟踪并退出,除非您用try
块括起来。
您需要编写一个具有try
块的方法,并调用包含您发布的代码的另一个方法(可能在另一个类中)。在try
块的末尾,您捕获InvalidNameException并执行某些操作(例如再次将用户发送回数据条目)。
编辑:
异常类InvalidNameException
不会处理异常。它是的例外。您在此类上编写的唯一代码将是描述异常条件所需的代码 - 例如,您可以为其提供一个属性,该属性是名称的实际值。
答案 1 :(得分:1)
你非常接近。警告:以下代码未经测试,只是您想要做的事情的要点。
您可以做的一件事是创建一个处理用户输入的类。该类读取输入,验证它并抛出任何不同类型的异常:
public class UserInput{
private Scanner keyboard;
public UserInput(Scanner keyboard){
this.keyboard = keyboard;
}
public String getName() throws InvalidNameException{
System.out.print("Please enter a name: ");
String newName = keyboard.nextLine();
if(/*some bad condition*/){
throw new InvalidNameException();
}else{
return newName;
}
}
}
然后你的主要方法会做类似的事情:
UserInput inputReader = new UserInput(new Scanner(System.in));
String name;
try{
name = inputReader.getName();
}
catch(InvalidNameException e){
//do some thing with e
}
在这里,您将在try catch块中包含抛出异常的方法,并捕获各种不同类型的异常。希望这有帮助