[英]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.