Java if else语句中的逻辑错误

时间:2018-08-02 11:52:34

标签: java if-statement while-loop logical-operators ujmp

我的代码:

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]后,循环在此处终止。但是我想在从timea和timeb获得相似的元素之后,循环继续直到timea的所有元素都访问。根据我的代码,它从timea数组访问1,2,3,然后将其丢弃。由于while语句while (k1 < timea.length && k2 < timeb.length ),这非常明显。因为当它获得循环计数器k2++时k2递增1。因此从timeb中获得3之后,k2变为1。所以当它获得k2<timeb.length时意味着1<1是错误的,因此循环终止。但是在那段时间内{time of {4,5,6}未被访问。我想在执行else语句后,如果if语句再次针对{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

1 个答案:

答案 0 :(得分:1)

在您的代码中,在if条件下,如果它们为==,则执行某些操作;如果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++;        
}