Java 声明要在数组中使用的枚举?

Java 声明要在数组中使用的枚举?,java,arrays,enums,Java,Arrays,Enums,对不起,这个问题可能很简单 我需要一组旗子 boolean[20] isTownVisited 但在其中使用int并不方便,我想使用字符串: isTownVisited[Town.Milan] = true; 或 我已尝试声明枚举 enum Town {Milan, Rome, Florence, Napoli} 但是我仍然不能用它来索引我的布尔数组。如何解决这个问题,我可以写以下内容: enum Town {Milan = 0, Rome = 1, Florence = 2, Napo

对不起,这个问题可能很简单

我需要一组旗子

boolean[20] isTownVisited
但在其中使用int并不方便,我想使用字符串:

 isTownVisited[Town.Milan] = true;

我已尝试声明枚举

enum Town {Milan, Rome, Florence, Napoli}
但是我仍然不能用它来索引我的布尔数组。如何解决这个问题,我可以写以下内容:

enum Town {Milan = 0, Rome = 1, Florence = 2, Napoli = 3}

您可以使用枚举集

Set<Town> towns = EnumSet.of(Town.Milan);

towns.add(Town.Rome);

return towns.contains(Town.Napoli);
Set towns=EnumSet.of(Town.Milan);
城镇。添加(城镇。罗马);
返回城镇。包含(城镇。那不勒斯);

在引擎盖下,EnumMap和EnumSet使用
int ordinal()枚举集使用位图。

u始终可以创建一个声明了所有变量的公共静态类

所以

然后你可以简单地做Town.rome来访问变量

注意:如果要在多个对象中使用这些变量,请不要使用静态变量


在这种情况下,创建普通变量,然后创建一个新对象并使用该对象的变量。听起来您需要的是一个映射而不是数组。您可以创建一个
地图
,其中
城镇
是一个枚举,布尔值是该城镇是否有人访问过。

Gee。。。我会用这个:

boolean[Town.values().length] isTownVisited;

isTownVisited[Town.Milan.ordinal] = true;

我将失去迭代所有城镇的能力,在静态类中为城镇设计唯一索引,并像你最初做的那样创建布尔数组。这样,您既可以获得迭代,也可以获得使用名称的能力。例如,rome=0;伦敦=1;等等,所有君士坦丁堡[0]都变成了君士坦丁堡[Towns.rome]。。希望这能解决您的问题p.S我相信您可以将enum强制转换为int x=(int)Town.Rome;谢谢,这可能就是我想要的:)但是现在EnumSet看起来很好。。。我尝试过使用它,我对它很满意,因为集合比数组更容易使用。。。
public class Town{
   public static bool Rome = false;
   // and the rest
}
boolean[Town.values().length] isTownVisited;

isTownVisited[Town.Milan.ordinal] = true;