非法论证异常

时间:2009-09-13 08:42:09

标签: java

当我输入一个不在列表中的字符串时,我在我的枚举犯罪类型

中收到此错误
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,这解决了第一个问题,但是当我输入其他内容时,我仍然在枚举类中得到错误。

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

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

e.g。

"murder".equals(crimeName)

答案 2 :(得分:3)

查看Enum.valueOf的API文档。我猜你会在那里找到问题的解释: “... IllegalArgumentException - 如果指定的枚举类型没有指定名称的常量,或者指定的类对象不代表枚举类型......”