如何在复数a + ci数组中找到最小值

时间:2019-06-18 22:14:35

标签: java arrays random

我正在尝试编写一种方法,该方法在复数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;
}

1 个答案:

答案 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;
}