2009-09-13 174 views
0

当我输入一个字符串,它不在列表中,我在枚举CrimeType得到这个错误非法参数异常

class: IllegalArgumentException, no enum const class CrimeType.a(in java.lang.Enum). 

是什么意思,我该如何解决这一问题?

public void enterCrime() 
{ 
    Crimes crimes = new Crimes(); 
    System.out.print("\t\tEnter crime: "); 
    crimeName = In.nextLine(); 

    if("murder".equals(crimeName) || "arson".equals(crimeName) || "assault".equals(crimeName)) 
    {    
     crimes.daysToStay(3);   
    } 
    else if("fraud".equals(crimeName) || "theft".equals(crimeName) || "vandalism".equals(crimeName)) 
    { 
     crimes.daysToStay(2); 
    } 
    else if("drunk".equals(crimeName) || "littering".equals(crimeName) || "badHair".equals(crimeName)) 
    { 
     crimes.daysToStay(1); 
    } 
    else 
    { 
     System.out.println("\t\tThat is not a valid crime. The crimes are"); 
     crimes.list(); 
    }  
    crimes.add(crimeName); 
    enterAction(); 
} 

枚举类

public enum CrimeType 
{ 
    murder, arson, assault, fraud, theft, vandalism, drunk, littering, badHair; 
} 

犯罪类

import java.util.*; 
import java.text.*; 
public class Crimes 
{ 
    private LinkedList<CrimeType> crimes = new LinkedList<CrimeType>();  

    public Crimes() 
    {  
    } 

    public void add(String crime) 
    { 
     CrimeType newCrime = CrimeType.valueOf(crime); 
     crimes.add(newCrime); 
    } 

好了,我把它改成.equals现在,修复了第一个问题,但是当我进入别的东西,我仍然在枚举类中出现这个错误。

+0

你在写什么类型的软件? badHair!?!为什么要在那里停下来,你可以添加数以千计的这些枚举值。 – 2009-09-13 08:48:55

+0

我在主代码中没有看到任何对CrimeType的引用。我错过了什么吗? – KLE 2009-09-13 08:50:04

+0

请指定crime.add(String crimeName)方法。 – crunchdog 2009-09-13 08:50:33

回答

3

您应该使用equals()方法比较字符串,而不是==。

例如

"murder".equals(crimeName) 
4

crime.add()正在执行,不管是否存在有效的犯罪。这很可能是抛出异常的方法(尽管如果不知道犯罪的数据类型我们就不知道)。据推测,该方法使用无效的字符串将犯罪字符串转换为枚举。

+0

我认为马丁是正确的。我敢肯定你不应该把crime.add()称为无效犯罪。您最终将调用CrimeType.valueOf(犯罪)来获取未在枚举中定义的字符串。您的enterCrime()方法需要稍微重新工作。一旦发现无效犯罪,它应该停止处理。 – dave 2009-09-13 10:07:04

3

检查Enum.valueOf的API文档。我想这就是你会找到你的问题的解释: “... IllegalArgumentException - 如果指定的枚举类型没有指定名称的常量,或者指定的类对象不表示枚举类型...”