我正在尝试编写一种方法,该方法在复数a + ci的数组中找到最小值,其中a和c均为双精度。 a是实部,ci是虚部。我试图让它通过数组,并比较每个对象a + ci和b + di。我将从比较实部开始,如果实部相等,那么我将继续进行假想部分,以使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;
}
答案 0 :(得分:0)
为什么有那么多的循环和嵌套循环?
对该阵列进行一次扫描即可:
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;
}
也不需要布尔标志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;
}