我做模数错了吗?因为在Java -13 % 64中应该评估,-13但我得到51.
在Java中,您可以按如下方式创建枚举:
public enum Letter {
A, B, C, D, E, F, G;
static {
for(Letter letter : values()) {
// do something with letter
}
}
}
Run Code Online (Sandbox Code Playgroud)
这个问题涉及"values()"方法.具体来说,它是如何实现的?通常,我可以在Eclipse中使用F3或CTRL + Click跳转到Java类的源代码(即使对于String,Character,Integer甚至Enum这样的类).可以查看其他枚举方法的来源(例如,valueOf(String)).
"values()"每次调用时都会创建一个新数组吗?如果我将它分配给局部变量然后修改其中一个元素,会发生什么(显然这不会影响values()返回的值,这意味着每次都会分配一个新数组).
它的代码是原生的吗?或者JVM /编译器是否专门处理它,只有当它无法证明它不会被修改时才从values()返回一个新实例.
是否可以++为枚举实现运算符?
我使用枚举处理状态机的当前状态,能够使用++运算符会很好.
Langton蚂蚁的问题很简单.一只蚂蚁走在白板和黑色方块的板上.
当"游戏"开始时,棋盘全是白色的.
我已经实施了模拟但是有一个非常丑陋的步行和转弯解决方案,我需要帮助改进.现在步行如下:
if (dir == "NORTH") {
// Walk up
} else if (dir == "EAST") {
// Walk right
} else if (dir == "SOUTH") {
// Walk down
} else if (dir == "WEST") {
// Walk left
}
Run Code Online (Sandbox Code Playgroud)
以及改变方向的功能:
private void turn(String leftOrRight){
if(dir == "NORTH" && lor == "RIGHT" ){
dir = "EAST";
} else if (dir == "NORTH" && leftOrRight == "LEFT" ){
dir = "WEST";
} else if (dir == …Run Code Online (Sandbox Code Playgroud) 我有一个Java的枚举如下:
public enum Cars
{
Sport,
SUV,
Coupe
}
Run Code Online (Sandbox Code Playgroud)
我需要获得枚举的下一个值.所以,假设我有一个名为myCurrentCar的变量:
private Cars myCurrentCar = Cars.Sport;
Run Code Online (Sandbox Code Playgroud)
我需要创建一个函数,在调用时将myCurrentCar的值设置为枚举中的下一个值.如果枚举不再有值,我应该将变量设置为枚举的第一个值.我以这种方式开始实施:
public Cars GetNextCar(Cars e)
{
switch(e)
{
case Sport:
return SUV;
case SUV:
return Coupe;
case Coupe:
return Sport;
default:
throw new IndexOutOfRangeException();
}
}
Run Code Online (Sandbox Code Playgroud)
这是有效的,但它是一个高维护功能,因为每次我修改枚举列表,我必须重构该功能.有没有办法将枚举分割成一个字符串数组,获取下一个值并将字符串值转换为原始枚举?因此,如果我在数组的末尾,我只需抓住第一个索引
我想创建一个名为increaseValue的方法,它的签名如下:
public Size increaseValue(Size s)
Run Code Online (Sandbox Code Playgroud)
我还有以下声明:
protected enum Size {XS, S, M, L, XL}
Run Code Online (Sandbox Code Playgroud)
我需要知道,如何在不使用Switch-Case语句的情况下使方法返回正确的值(即输入为L时的XL ......等)?
谢谢 !