Java 复杂代码/算法优化(例如简化)困境

Java 复杂代码/算法优化(例如简化)困境,java,algorithm,Java,Algorithm,如何简化此代码 如果(x==0)x=1; 如果(x==1)x=0,则为else; 如果(x==2)x=3; 如果(x==3)x=2; 要使用伪代码符号,可能: if (x % 2 == 0) x = x + 1 else x = x - 1 e、 如果它是偶数,你是加一,否则减一?不过,在优化方面,我看不出您的原始代码有什么特别慢或错误。您可以使用以下内容: int mymap[4] = {1,0,3,2}; 然后在代码中使用以下命令: x = mymap[x]; 处理此类简单数据

如何简化此代码


如果(x==0)x=1;
如果(x==1)x=0,则为else;
如果(x==2)x=3;
如果(x==3)x=2;

要使用伪代码符号,可能:

if (x % 2 == 0) x = x + 1
   else x = x - 1

e、 如果它是偶数,你是加一,否则减一?不过,在优化方面,我看不出您的原始代码有什么特别慢或错误。

您可以使用以下内容:

int mymap[4] = {1,0,3,2};
然后在代码中使用以下命令:

x = mymap[x];

处理此类简单数据的常用方法是使用switch语句

如果x始终在0和3之间,请尝试以下操作:

x ^= 1;
它切换最低有效位

如果x可以是一个不在0到3之间的值,则可以首先测试该值:

if (x >= 0 && x <= 3) {
    x ^= 1;
}

if(x>=0&&x
if(x>=0&&x使用
开关
语句,代码将更可编辑:

switch(x) {
case 0: x=1: break;
case 1: x=0: break;
case 2: x=3: break;
case 3: x=2; break;
}
然而,它只是关于代码可读性,而不是算法,也不是优化


除非x可以小于0或大于3,问题规范没有说明这一点。

如果(0不是说我认为这更简单,并且它没有将情况限制为0..3,但是:

if( 0 <= x && x <= 3 )
  x ^= 1;
x += (x % 2 == 0) ? 1 : -1; 
一艘班轮:

x=(x==0)?1:((x==1)?0:(x==2)?3:(x==3)?2:x);

这是最简单的形式:

if      (x == 0) x = 1;
else if (x == 1) x = 0;
else if (x == 2) x = 3;
else if (x == 3) x = 2;
等等,这正是你的密码

神秘的一行程序并不简单

x ^= x & ~3 == 0 ? 1 : 0;

不幸的是,我的代码太过简化,无法使最小30个字符成为实现此目的的最佳方法

if ( x >>> 2 == 0 )
{   x ^= 1;
}
if(x % 2 == 0){
  x = +x;
}else{
  x = -x;
}

简化!=优化;算法!=代码;亲吻;“简化”判断准确的度量?键入的字符数?语句数?@jprete:根据用户名判断我会说是:-)
x
是否保证在0-3范围内?如果是这样,那么
xor
技巧是最好的。否则我建议使用
switch
语句。在没有上下文的情况下尝试简化这一点是没有意义的。这是为了做什么?当x大于3时会发生什么?或者小于0时会发生什么?更重要的是,为什么?This是不等价的:当
x<0 | | x>3
时,它也会修改
x
x<0 | | x>3
时,它也会修改
x
太好了,我给它+1:)您可以在除2个最低有效位之外的所有位上使用按位and,以避免两个不相等比较。如果格式更好并删除括号,则更易于阅读。希望
x
不是<0或>3。如何定义更“简单”?这更“简单”因为代码路径更少。Switch语句并不比原始语句好。我认为它们实际上更糟糕。所以最后一个应该是第一个,最后一个…可以缩短为1(非空白)字符。谜题:哪一个?结果与问题完全不同
x ^= x & ~3 == 0 ? 1 : 0;
if ( x >>> 2 == 0 )
{   x ^= 1;
}
if(x % 2 == 0){
  x = +x;
}else{
  x = -x;
}