簡體   English   中英

Java if else語句中的邏輯錯誤

[英]Logical Error in if else statement in java

我的代碼:

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。所以從時間b中獲得3之后,k2變為1。所以當它得到k2<timeb.length ,這意味着1<1這是錯誤的,所以循環終止。 但是在那個時候,timea的{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

在您的代碼中, if條件為==,則在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++;        
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM