我正在尝试编写一个方法来查找复数 a + ci 数组中的最小值,其中 a 和 c 都是 double 。 a 是实部,ci 是虚部。我试图让它遍历数组并比较每个对象 a + ci 和 b + di。我将从比较实部开始,如果实部相等,那么我将继续讨论虚部,这样如果 a < b 或 if (a==b), c < d,complexNumberOne 到目前为止,我有一个方法可以确定数组中的最小数字,但只能通过比较实部: 但是我根据上述条件找到最小元素的方法似乎行不通:import java.util.Scanner;
import java.util.Random;
private boolean arrayTest = false;
public double min(Complex[] arr) {
double min = Double.MIN_VALUE;
for(int i = 0; i < arr.length;i++) {
if(arr[i].getReal() < min) {
min = arr[i].getReal();
}
}
return min;
}
public Complex smallest(Complex[] arr) {
Complex min = new Complex();
for(int i = 0; i < arr.length;i++) {
while(!arrayTest) {
if(arr[i].getReal()<arr[i+1].getReal()) {
arrayTest=true;
min = arr[i];
}else if(arr[i].getReal()==arr[i+1].getReal()) {
while(!arrayTest) {
if(arr[i].getImaginary()<arr[i+1].getImaginary()) {
arrayTest=true;
min = arr[i];
}
}
}
}
}
return min;
}
最佳答案
为什么有这么多循环和嵌套循环?
对数组进行一次扫描即可:
public Complex smallest(Complex[] arr) {
if (arr.length == 0) return null;
Complex min = arr[0];
for (int i = 1; i < arr.length; i++) {
if (arr[i].getReal() < min.getReal()) {
min = arr[i];
} else if (arr[i].getReal() == min.getReal()) {
if (arr[i].getImaginary() < min.getImaginary()) {
min = arr[i];
}
}
}
return min;
}
此外,也不需要 boolean 标志arrayTest
。
如果您不介意长条件,则可以进一步简化代码:
public Complex smallest(Complex[] arr) {
if (arr.length == 0) return null;
Complex min = arr[0];
for (int i = 1; i < arr.length; i++) {
if (arr[i].getReal() < min.getReal() || (arr[i].getReal() == min.getReal() && arr[i].getImaginary() < min.getImaginary())) {
min = arr[i];
}
}
return min;
}
关于java - 如何找到复数数组 a + ci 中的最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56657718/