我正在开展一个项目,我必须查看其他人的代码并对其进行修改。 然而,由于我班上的许多同学都很擅长编程,所以很多人都有这样一个混乱的组织。 我被赋予即兴创作的代码有很多缺陷和冗余的冗余行。 我正在尽力清理它们,但由于我的经验不足,我发现很难清理它们。 诸如
之类的行if (turnElapsed[1] == 2)
{
turnElapsed[0] += 1;
turnElapsed[1] = 0;
}
turnElapsed[1]++;
对我来说看起来很多余。 我相信,必须有一个更好的方法来编写它的简单版本。 所以我尝试了下面的代码,但它似乎无法正常工作。
turnElapsed[0] += (turnElapsed[1]++ == 2) ? 1 ; 0 ;
turnElapsed[1] = (turnElapsed[1] == 2 ) ? 0; turnElapsed[1];
答案 0 :(得分:5)
首先,您使用;
作为分隔符而不是:
,这是语法错误。其次,你在第一行递增turnElapsed[1]
,这意味着当它到达第二行时它将不再等于2 - 这与原始逻辑不同。这就是您的版本无法正常运行的原因。
但是,如果您确实修复了这些错误,我认为您的代码不会更容易阅读。原件更具可读性,因为它更清楚地表达了意图。您可以阅读并将其表达为“如果turnElapsed [1]为2然后......”。您的替代方案占用的线路更少,但更“神秘”。原始代码的另一个优点是,如果你想在if条件为真时中断,你可以在大括号内放置一个断点 - 你不能用三元运算符(?)来做。
答案 1 :(得分:1)
你的问题是它不易阅读和理解。这就是为什么你没有看到你的错误 问题是你没有在第二个版本中增加。试试这个
turnElapsed[0] += (turnElapsed[1]++ == 2) ? 1 : 0 ;
turnElapsed[1] = ((turnElapsed[1] == 2 ) ? 0; turnElapsed[1]) + 1;
答案 2 :(得分:1)
难道你不只是在turnElapsed中保留二进制数,而最重要的位在turnElapsed [0]中?一个更好的代码版本是:
long turnElapsed;
...
turnElapsed++;
或者,如果你真的不想开始搞乱位:
turnElapsed[0] += turnElapsed[1]
turnElapsed[1] = (1 + turnElapsed[1]) % 2
编辑:显然,turnElapsed [1]为0或1,每当turnElapsed从1变为0时,turnElapsed [0]就会递增。所以你有以下内容:
long number;
...
number++;
turnElapsed[0] = number/2;
turnElapsed[1] = number%2;
不需要ifs,?:或其他任何东西。实际上,你甚至不需要数组。