gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 10:56:57 26 4
gpt4 key购买 nike

我的代码:

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这是错误的,所以循环被终止。但那时候{4,5,6} timea 未被访问。我想在执行 else 语句后 if 语句再次执行 for {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] > 时间b[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++;
}

关于java - java中if else语句的逻辑错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51652975/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com