java中if-else语句中的逻辑错误



我的代码:

import org.ujmp.core.Matrix;
import org.ujmp.core.SparseMatrix;
public class part {
public static void main(String args[]) throws Exception{
Matrix Bigomega=Matrix.Factory.zeros(6,6);
Matrix omega = SparseMatrix.Factory.zeros(6, 6);
int []timea={1,2,3,4,5,6};
int [] timeb={3};
int k1=0,k2=0;
while (k1 < timea.length && k2 < timeb.length ) {
if (timea[k1] < timeb[k2]) {
omega.setAsInt(1, k1, k1);
omega.setAsInt(-1, k1, k1 + 1);
omega.setAsInt(-1, k1 + 1, k1);
omega.setAsInt(1, k1 + 1, k1 + 1);
Bigomega = Bigomega.plus(omega);
omega.clear();
k1++;
}
else if (timea[k1] == timeb[k2]){
omega.setAsInt(1, k1, k1);
omega.setAsInt(-1, k1, k1 + 1);
omega.setAsInt(-1,k1+1,k1);
omega.setAsInt(1,k1+1,k1+1);
Bigomega=Bigomega.plus(omega);
omega.clear();
k2++;
}
}
System.out.println(Bigomega);
}
}

输出:

1.0000    -1.0000     0.0000     0.0000     0.0000     0.0000
-1.0000     2.0000    -1.0000     0.0000     0.0000     0.0000
0.0000    -1.0000     2.0000    -1.0000     0.0000     0.0000
0.0000     0.0000    -1.0000     1.0000     0.0000     0.0000
0.0000     0.0000     0.0000     0.0000     0.0000     0.0000
0.0000     0.0000     0.0000     0.0000     0.0000     0.0000

不需要的输出。在获得timea[k1] == timeb[k2]之后,循环在此终止。但我希望在从时间a和时间b中获得类似的元素后,循环继续,直到时间a的所有元素都访问为止。根据我的代码,它从timea数组访问1,2,3,然后丢弃。这是非常明显的,因为while语句while (k1 < timea.length && k2 < timeb.length )。因为当它得到循环计数器k2++k2时,增量为1。所以从时间b得到3之后,k2变成1。所以当它得到k2<timeb.length时,意味着1<1为假,所以循环终止。但是在该时间中,时间a的CCD_ 6没有被访问。我想在执行完else语句后,如果该语句再次为{4,5,6}执行。

如何做到这一点?

期望输出:

1.0000    -1.0000     0.0000     0.0000     0.0000     0.0000
-1.0000     2.0000    -1.0000     0.0000     0.0000     0.0000
0.0000    -1.0000     2.0000    -1.0000     0.0000     0.0000
0.0000     0.0000    -1.0000     2.0000     -1.0000     0.0000
0.0000     0.0000     0.0000     -1.0000     2.0000     -1.0000
0.0000     0.0000     0.0000     0.0000     1.0000     -1.0000

在您的代码中,在if条件下,如果它们是==,则执行某些操作,如果timea[k1]<timeb[k2],但如果timea[k1]>timeb[k2],则不执行任何操作。这就是为什么您会错过一些迭代。您可以处理这种情况,也可以使else>=而不是仅==。

我想指出的另一件事是,Java中接受了一些编码约定,您最好使用它们来获得可读的代码。例如,BigOmega应被称为BigOmega,并带有小写字母。

最后一件事是你的while循环。你可以这样做,这将使它比重复代码更具可读性。

while (k1 < timea.length && k2 < timeb.length ) {
omega.setAsInt(1, k1, k1);
omega.setAsInt(-1, k1, k1 + 1);
omega.setAsInt(-1, k1 + 1, k1);
omega.setAsInt(1, k1 + 1, k1 + 1);
Bigomega = Bigomega.plus(omega);
omega.clear();
if (timea[k1] < timeb[k2])
k1++;
else          
k2++;        
}

相关内容

  • 没有找到相关文章

最新更新