Joe*_*gue 1 java foreach concept
我一直在尝试一个我想要制作的游戏.我发现除了for循环之外,我有两个相同的方法,这与前者相反.
我试图这样做,所以我可以使用相同的代码向前或向后.我最终得到了:
for (int i = start; i != (finish + 1 * ((start < finish) ? 1 : -1)); i += 1 * ((start < finish) ? 1 : -1))
Run Code Online (Sandbox Code Playgroud)
A)B)我想与大家分享这个概念.
B)我很好奇这种循环的效率.我知道它正在计算目标数量和访问时的实施因素,但我不知道如何测试它.
C)当我在它的时候,我找到了一条线,它可以交换两个变量而不使用临时变量.这需要一点时间来阅读,但这比使用临时更好(代码明智)吗?(下面主要的第3行)
我已经测试了它的功能,它按预期运行.如果第二个数字大于第一个数字,则计数.如果没有,它会倒计时.我的测试代码是:
// A generic loop that can go up or down
import java.io.*;
public class reversable
{
public static int start = 1;
public static int finish = 10;
public static void main(String[] args)
{
for (int i = start; i != (finish + 1 * ((start < finish) ? 1 : -1)); i += 1 * ((start < finish) ? 1 : -1))
{
System.out.println("i = " + i);
}
finish = (start + finish) - (start = finish);
System.out.println("Finish = " + finish);
System.out.println("Start = " + start);
for (int i = start; i != (finish + 1 * ((start < finish) ? 1 : -1)); i += 1 * ((start < finish) ? 1 : -1))
{
System.out.println("i = " + i);
}
finish = 10;
for (int i = start; i != (finish + 1 * ((start < finish) ? 1 : -1)); i += 1 * ((start < finish) ? 1 : -1))
{
System.out.println("i = " + i);
}
}
}
Run Code Online (Sandbox Code Playgroud)
根据评论,这是否可以接受:
public static void reversable (int i, int j)
{
if (i > j) int inc = -1; // Count down
else int inc = 1; // Count up
j += inc;
for (i; i != j; i += inc)
{
dostuff();
morestuff();
mostuff();
}
}
Run Code Online (Sandbox Code Playgroud)
mat*_*t b 15
你应该努力编写可读代码,而不是代码在一行中做很多事情或者有花哨的技巧.
如果我和你合作开展一个项目,我可能会想在你第一次读到for循环之后扼杀你,也就是说如果我的脑袋没有爆炸试图先了解它.同意在作业中进行分配.
Bil*_*ard 10
如果我在生产中看到这个代码,我会立即将它重构为更具可读性的东西,这可能就像你开始的那样.
想想你想减少代码重复的原因.这是为了使您的代码更易于维护.你觉得你做到了吗?
当我在它的时候,我找到了一条交换两个变量而不使用临时变量的行.这需要一点时间来阅读,但这比使用临时更好(代码明智)吗?
这仅适用于数字类型,所以我发现它不是那么有用.对于不了解技巧的人来说,你的代码可读性较差,从而减慢了代码的维护速度.我不认为值得节省一个临时变量.
嗯不想成为一块砖,但我想你试着写:
public static void doAction(int i) {
System.out.println("i = " + i);
}
public static void loopValues(int i, int j) {
if (i > j) while (i >= j) doAction(i--);
else while (i <= j) doAction(i++);;
}
public static void main(String[] args) {
int start = 1, finish = 10;
loopValues(start, finish);
loopValues(finish, start);
}
Run Code Online (Sandbox Code Playgroud)
你有2个循环的原因是效率和你的案例可读性.比较是昂贵的操作,你通常不想添加额外的比较循环只是为了改变它的正常过程.