【发布时间】:2019-06-18 22:14:35
【问题描述】:
我正在尝试编写一种方法,该方法在复数 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;
}
【问题讨论】:
-
你需要
double min = Double.MAX_VALUE;而不是double min = Double.MIN_VALUE; -
while围绕if (arr[i].getimaginary() < ...循环是错误的。如果if没有第一次将arrayTest设置为true,则循环内不会发生任何变化,这可能会导致if将arrayTest设置为true,所以你'有一个无限循环。对于初学者来说,也许只是摆脱那个while。 -
对于复数,这不是“小”的通常定义。复数不存在全序,但通常根据它们与原点的距离对它们进行部分排序,即 (r * r + i * i - 如果你不需要取平方根'只是比较)。