在 Java 中处理自定义异常
Working with custom Exceptions in Java
首先 post 这里和 Java 的编程新手。对于我的一项作业,我们被要求创建一个程序,该程序在数组中包含对象,这些对象是具有特定信息字段的汽车,然后我们必须使用它来通过自定义异常确定是否显示汽车。我还没有完全完成,但出于某种原因,每当我 运行 我的程序时,它总是抛出异常。任何指针的帮助将不胜感激,希望我的代码不会太糟糕!
这是我的主要内容:
package throwusedcarexceptions;
public class ThrowUsedCarExceptions {
public static void main(String[] args) {
int vNumber, year, miles;
String make;
double price;
try{
UsedCar[] cars = new UsedCar[2];
cars[0] = new UsedCar(1234, "Honda", 2001, 78340, 5999.99);
cars[1] = new UsedCar(1235, "Ford", 2005, 78340, 5999.99);
for (int i = 0; i < cars.length; i++){
System.out.println(cars[i]);
}
}
catch(UsedCarException error){
System.out.println(error.getMessage());
}
}
}
然后我的class判断是否抛出异常:
package throwusedcarexceptions;
public class UsedCar {
int vNumber, year, miles;
String make;
double price;
public UsedCar(int vNumber, String make, int year, int miles, double price)
throws UsedCarException{
setVNumber(vNumber);
if(vNumber < 1000 || vNumber > 9999)
throw(new UsedCarException());
setMake(make);
if(!"Ford".equals(make) || !"Honda".equals(make) ||
!"Toyota".equals(make) || !"Chrysler".equals(make) || !"Other".equals(make))
throw(new UsedCarException());
setYear(year);
if(year < 1990 || year > 2014)
throw(new UsedCarException());
setMiles(miles);
if(miles < 0)
throw(new UsedCarException());
setPrice(price);
if(price < 0)
throw(new UsedCarException());
}
public void setVNumber(int vNumber){
this.vNumber = vNumber;
}
public void setMake(String make){
this.make = make;
}
public void setYear(int year){
this.year = year;
}
public void setMiles(int miles){
this.miles = miles;
}
public void setPrice(double price){
this.price = price;
}
public int getVNumber(){
return vNumber;
}
public String getMake(){
return make;
}
public int getYear(){
return year;
}
public int getMiles(){
return miles;
}
public double getPrice(){
return price;
}
}
最后是我的例外 class:
package throwusedcarexceptions;
public class UsedCarException extends Exception {
public UsedCarException(){
super("Error: Not a valid input");
}
}
感谢您的宝贵时间!
这条语句:
if(!"Ford".equals(make) || !"Honda".equals(make) ||
!"Toyota".equals(make) || !"Chrysler".equals(make) ||
!"Other".equals(make))
throw(new UsedCarException());
将始终抛出异常,因为 make
将不等于所有(或除一个之外的所有)品牌。你可能想要这个:
if(!("Ford".equals(make) || "Honda".equals(make) ||
"Toyota".equals(make) || "Chrysler".equals(make) ||
"Other".equals(make)))
throw(new UsedCarException());
否则只需将所有 ||
更改为 &&
。
首先,当您抛出异常时,最好记录它(System.out 在这种情况下就足够了)并打印有关发生的事情和地点的详细信息 - 例如,导致的值例外。所以至少使用:
public UsedCarException(String message) {
super("Error: Not a valid input " + message);
}
问题出在当 make
等于 Honda
时被评估为 true
的行:
if (!"Ford".equals(make) || !"Honda".equals(make) || !"Toyota".equals(make) ||
!"Chrysler".equals(make) || !"Other".equals(make)) {throw (new UsedCarException());}
请使用{}
。将其上方的行更改为以下行,或者随意应用 De Morgan 定律,其中 !(A or B)
等于 (!A and !B)
.
if (!(
"Ford".equals(make) || "Honda".equals(make) || "Toyota".equals(make) ||
"Chrysler".equals(make) || "Other".equals(make)))
{
throw (new UsedCarException());
}
最后,这还是一个很丑的状态。为什么不检查该值是否包含在数组或列表中?
List<String> list = Arrays.asList("Ford", "Honda", "Toyota", "Chrysler", "Other");
if (!list.contains(make)) {
throw (new UsedCarException());
}
首先 post 这里和 Java 的编程新手。对于我的一项作业,我们被要求创建一个程序,该程序在数组中包含对象,这些对象是具有特定信息字段的汽车,然后我们必须使用它来通过自定义异常确定是否显示汽车。我还没有完全完成,但出于某种原因,每当我 运行 我的程序时,它总是抛出异常。任何指针的帮助将不胜感激,希望我的代码不会太糟糕!
这是我的主要内容:
package throwusedcarexceptions;
public class ThrowUsedCarExceptions {
public static void main(String[] args) {
int vNumber, year, miles;
String make;
double price;
try{
UsedCar[] cars = new UsedCar[2];
cars[0] = new UsedCar(1234, "Honda", 2001, 78340, 5999.99);
cars[1] = new UsedCar(1235, "Ford", 2005, 78340, 5999.99);
for (int i = 0; i < cars.length; i++){
System.out.println(cars[i]);
}
}
catch(UsedCarException error){
System.out.println(error.getMessage());
}
}
}
然后我的class判断是否抛出异常:
package throwusedcarexceptions;
public class UsedCar {
int vNumber, year, miles;
String make;
double price;
public UsedCar(int vNumber, String make, int year, int miles, double price)
throws UsedCarException{
setVNumber(vNumber);
if(vNumber < 1000 || vNumber > 9999)
throw(new UsedCarException());
setMake(make);
if(!"Ford".equals(make) || !"Honda".equals(make) ||
!"Toyota".equals(make) || !"Chrysler".equals(make) || !"Other".equals(make))
throw(new UsedCarException());
setYear(year);
if(year < 1990 || year > 2014)
throw(new UsedCarException());
setMiles(miles);
if(miles < 0)
throw(new UsedCarException());
setPrice(price);
if(price < 0)
throw(new UsedCarException());
}
public void setVNumber(int vNumber){
this.vNumber = vNumber;
}
public void setMake(String make){
this.make = make;
}
public void setYear(int year){
this.year = year;
}
public void setMiles(int miles){
this.miles = miles;
}
public void setPrice(double price){
this.price = price;
}
public int getVNumber(){
return vNumber;
}
public String getMake(){
return make;
}
public int getYear(){
return year;
}
public int getMiles(){
return miles;
}
public double getPrice(){
return price;
}
}
最后是我的例外 class:
package throwusedcarexceptions;
public class UsedCarException extends Exception {
public UsedCarException(){
super("Error: Not a valid input");
}
}
感谢您的宝贵时间!
这条语句:
if(!"Ford".equals(make) || !"Honda".equals(make) ||
!"Toyota".equals(make) || !"Chrysler".equals(make) ||
!"Other".equals(make))
throw(new UsedCarException());
将始终抛出异常,因为 make
将不等于所有(或除一个之外的所有)品牌。你可能想要这个:
if(!("Ford".equals(make) || "Honda".equals(make) ||
"Toyota".equals(make) || "Chrysler".equals(make) ||
"Other".equals(make)))
throw(new UsedCarException());
否则只需将所有 ||
更改为 &&
。
首先,当您抛出异常时,最好记录它(System.out 在这种情况下就足够了)并打印有关发生的事情和地点的详细信息 - 例如,导致的值例外。所以至少使用:
public UsedCarException(String message) {
super("Error: Not a valid input " + message);
}
问题出在当 make
等于 Honda
时被评估为 true
的行:
if (!"Ford".equals(make) || !"Honda".equals(make) || !"Toyota".equals(make) ||
!"Chrysler".equals(make) || !"Other".equals(make)) {throw (new UsedCarException());}
请使用{}
。将其上方的行更改为以下行,或者随意应用 De Morgan 定律,其中 !(A or B)
等于 (!A and !B)
.
if (!(
"Ford".equals(make) || "Honda".equals(make) || "Toyota".equals(make) ||
"Chrysler".equals(make) || "Other".equals(make)))
{
throw (new UsedCarException());
}
最后,这还是一个很丑的状态。为什么不检查该值是否包含在数组或列表中?
List<String> list = Arrays.asList("Ford", "Honda", "Toyota", "Chrysler", "Other");
if (!list.contains(make)) {
throw (new UsedCarException());
}