Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java for循环迭代和循环多个变量,直到满足条件_Java_For Loop - Fatal编程技术网

Java for循环迭代和循环多个变量,直到满足条件

Java for循环迭代和循环多个变量,直到满足条件,java,for-loop,Java,For Loop,我写了下面的代码,它完成了我希望它完成的任务,但是我认为有一种比在for循环中执行条件语句更快的方法 int i,j,k,l; int[] X = new int[] {111,222,333,444}; int XL = X.length; for (i=0, j=1; i<XL; j=(j<XL-1)?j+1:0, i++) { println("i:" +i +" j:" + j); } // returns: // i:0 j:1 // i:1 j:2 // i:2

我写了下面的代码,它完成了我希望它完成的任务,但是我认为有一种比在for循环中执行条件语句更快的方法

int i,j,k,l;
int[] X = new int[] {111,222,333,444};
int XL = X.length;

for (i=0, j=1; i<XL; j=(j<XL-1)?j+1:0, i++) {
  println("i:" +i +" j:" + j);
}

// returns:
// i:0 j:1
// i:1 j:2
// i:2 j:3
// i:3 j:0
inti,j,k,l;
int[]X=新的int[]{11122233444};
int XL=X.长度;

对于(i=0,j=1;i在问题上采取不同的角度,而不仅仅是说“做x使代码快50%”,您是如何测试代码的?您是如何确定代码太慢的

如今,Java的JIT编译器非常非常擅长于它所做的事情,进行了这些微优化,因此您不必这样做。如果您开始进行大量的低级别优化,并使代码变得有些愚蠢:

  • 您可能会或可能不会实现小的速度提升
  • 您将使您的代码几乎无法维护且难以阅读
  • 您可能会欺骗JIT编译器,使其不进行本来可以进行的优化(因为它对常见Java习语的理解远远超过对代码的模糊理解)

如果你仍然,毫无疑问,不可避免地需要应用程序的每一次速度提升,那么最好的办法就是在汇编程序中写入这些位。如果你只是为了让事情快一点,最好的现实建议几乎总是“不要麻烦”.

从不同的角度看待这个问题,而不仅仅是说“做x使代码快50%”,您是如何测试代码的,以及您是如何确定代码太慢的

如今,Java的JIT编译器非常非常擅长于它所做的事情,进行了这些微优化,因此您不必这样做。如果您开始进行大量的低级别优化,并使代码变得有些愚蠢:

  • 您可能会或可能不会实现小的速度提升
  • 您将使您的代码几乎无法维护且难以阅读
  • 您可能会欺骗JIT编译器,使其不进行本来可以进行的优化(因为它对常见Java习语的理解远远超过对代码的模糊理解)

如果你仍然,毫无疑问,不可避免地需要应用程序的每一次速度提升,那么最好的办法就是在汇编程序中写入这些位。如果你只是为了让事情快一点,最好的现实建议几乎总是“不要麻烦”.

首先,您的for循环并不像现在这样令人困惑,您可以添加一些注释以使其更易于理解

如果您想在考虑可读性的情况下重写它,可以使用一个索引器来完成

int i; 
int[] X = new int[] {111,222,333,444}; 


for (i=0; i < X.length; i++) { 
  println("i:" +i +" j:" + (i < X.lenght -1) ? i + 1 : 0); 
}
inti;
int[]X=新的int[]{11122233444};
对于(i=0;i
首先,您的for循环并不像现在这样令人困惑,您可以添加一些注释以使其更易于理解

如果您想在考虑可读性的情况下重写它,可以使用一个索引器来完成

int i; 
int[] X = new int[] {111,222,333,444}; 


for (i=0; i < X.length; i++) { 
  println("i:" +i +" j:" + (i < X.lenght -1) ? i + 1 : 0); 
}
inti;
int[]X=新的int[]{11122233444};
对于(i=0;i
Kerrek SB的评论是我首选的解决方案。 在这里,它被改写为更一般的形式:

String[] X = new String[] {"AAA", "BBB", "CCC", "DDD"};
int XL = X.length;

for (int i=0; i<XL; i++) {
  println("i:" +X[i] +" j:" + X[(i+1)%XL] );
}

Kerrek SB的评论是我首选的解决方案。 在这里,它被改写为更一般的形式:

String[] X = new String[] {"AAA", "BBB", "CCC", "DDD"};
int XL = X.length;

for (int i=0; i<XL; i++) {
  println("i:" +X[i] +" j:" + X[(i+1)%XL] );
}

你是如何确定这种方法太慢的?与其保留一个单独的变量
j
,你可以只使用
(i+1)%4
.Yikes.模糊的代码。没人知道这是怎么回事。如果你想更快->在汇编程序中编写它(可读性也差不多)我认为Kerrek SB的答案比添加额外的一层不必要的逻辑更简单。效果很好。如果可以的话,我会自己回答。你是如何确定这种方式太慢的?与其保留一个单独的变量
j
,你可以只取
(I+1)%4
.Yikes.模糊代码。没人知道它是怎么回事。如果你想更快->用汇编程序编写(可读性也差不多)我认为Kerrek SB的答案比添加我多余的一层不必要的逻辑更简单。效果很好。如果可以的话,我会回答我自己。这更重要的是让它不那么混乱……我需要一个for循环来迭代具有多个键值I、j等的数组。这些键值都是递增的,当它们到达en时返回到开始d、 @Mogga:“迭代并返回到开始”听起来和模块加法完全一样:-)更重要的是让它不那么混乱…我需要一个for循环来迭代一个数组,该数组包含多个键值I、j等,这些键值都是递增的,当它们到达结束时返回到开始处。@Mogga:“迭代并返回到开始处”听起来很像模块加法:-)