簡體   English   中英

如何在復數a + ci數組中找到最小值

[英]How do I find the smallest value in an array of Complex numbers a + ci

我正在嘗試編寫一個方法,在復數a + ci的數組中找到最小的值,其中a和c都是雙精度數。 a是真實的部分,ci是虛部。 我試圖讓它通過數組並比較每個對象a + ci和b + di。 我將首先比較真實部分,如果真實部分是相等的,那么我將轉向想象的那樣,如果a <b或if(a == b),c <d,則complexNumberOne <complexNumberTwo。

到目前為止,我有一個方法可以確定數組中的最小數字,但只能通過比較實際部分:

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

此外,不需要布爾標志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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM