请耐心等待,因为我正在努力解决这个问题。所以我们假设我有一个名为" UserType"的用户定义类型。而且这种类型有4个值:北,南,东和西。
public enum UserType {
NORTH, SOUTH, EAST, WEST
}
然后,我想在另一个类中编写一个方法语句,它将根据类型增加两个变量的值。例如,
public class direction {
private int peopleWhoGoNorth;
private int peopleWhoGoSouth;
因此,每次调用以下方法时,WhoWhoGoNorth应该跟踪北方人数:
public void whichWay(UserType type) {
}
我想知道如何在方括号之间创建一个语句,基本上会说:如果类型是North,则向peopleWhoGoNorth添加1,如果类型为South,则向peopleWhoGoSouth添加1。我猜测if / else语句应该这样做,但我不确定语法是如何工作的。以下是否可以?
public void whichWay (UserType type){
if (UserType = NORTH){peopleWhoGoNorth = peopleWhoGoNorth + 1);
if (UserType = SOUTH){peopleWhoGoSouth = peopleWhoGoSouth + 1);
}
如果我有任何方法可以澄清这个问题,请告诉我。
答案 0 :(得分:4)
您可以使用开关作为枚举:
public void whichWay (UserType type){
switch (type) {
case NORTH:
peopleWhoGoNorth++;
break;
case SOUTH:
peopleWhoGoSouth++;
break;
default:
throw new IllegalArgumentException();
}
}
答案 1 :(得分:3)
您需要使用==
:if (type == NORTH)
。
您还可以使用switch
声明:
switch(type) {
case NORTH:
peopleWhoGoNorth++;
break;
case SOUTH:
peopleWhoGoSouth++;
break;
default: // do nothing
}
答案 2 :(得分:2)
您只需将type
与您要检查的类型进行比较即可。
public void whichWay(UserType type) {
if (type == UserType.NORTH) {
//Execute code
}
//Other types analog
}
或者您可以使用switch语句:
public void whichWay(UserType type) {
switch (type) {
case NORTH:
//Execute code
break;
//Other types analog
default:
}
}
答案 3 :(得分:0)
我会说你在正确的轨道上。
只考虑方法"哪个":
public void whichWay(UserType type) {
if(type == UserType.NORTH) { peopleWhoGoNorth++; }
else if(type == UserType.SOUTH) { peopleWhoGoSouth++; }
}
答案 4 :(得分:0)
switch
和if-else
已被涵盖,但您也可以使用Map
来包含已经朝着特定方向前进的人数。
public enum UserType {
NORTH, SOUTH, EAST, WEST
}
public class Example{
private final Map<UserType,Integer> typeMap = new HashMap<>();
public void whichWay(UserType type){
int val = typeMap.getOrDefault(type,0);
typeMap.put(type,val++);
}
}
当然,您需要添加方法来获取这些值,以使其有用。
答案 5 :(得分:0)
另一种方法是使用an EnumMap:
private final EnumMap<UserType, Integer> counter = new EnumMap<> (UserType.class);
{
for (UserType u : UserType.values()) counter.put(u, 0);
}
public void whichWay (UserType type){
counter.put(type, counter.get(type) + 1);
}
或者使用Java 8:
private final EnumMap<UserType, Integer> counter = new EnumMap<> (UserType.class);
public void whichWay (UserType type){
counter.compute(type, (u, i) -> i == null ? 0 : i + 1);
}
(注意:这不是线程安全的)