例如,我有這個陣列:
double array1[] = {2.3, 5.0, 4.7, 8.2, 1.8, 9.0, 0, 0, 0, 0, 0, 0};
我想找到陣列的最后一個不為0的數字。在這種情況下,我的輸出應該是:9.0
我的代碼是:
double array1[] = {2.3, 5.0, 4.7, 8.2, 1.8, 9.0, 0, 0, 0, 0, 0, 0};
double array2[] = array1.length;
double num;
for (int i = 0; i < array1.length; i ){
array2[i] = array1[i];
if(array2 != 0){
num = array[i-1];
}
}
但它不起作用。
我需要強調 array1 的大小總是相同的。但是非零數字可以改變,在任何情況下,所有的零都將始終位于陣列的末尾。
我還需要array2,由array1獲得。
此外,所有數字始終為正。
uj5u.com熱心網友回復:
您需要從陣列的末尾開始,而不是開頭:
public static double getLastNonZero(double [] data) throws Exception {
for (int i = data.length-1; i >=0; i--) {
if (data[i] != 0) {
return data[i];
}
}
throw new Exception("No value found");
}
public static void main(String[] args) {
double array1[] = {2.3, 5.0, 4.7, 8.2, 1.8, 9.0, 0, 0, 0, 0, 0, 0};
try {
System.out.println(getLastNonZero(array1));
} catch (Exception e) {
e.printStackTrace();
}
}
uj5u.com熱心網友回復:
這是使用回圈和三元運算子的一種方法(a ? b : c如果 a 為真則回傳b,否則回傳c)
double array1[] = {2.3, 5.0, 4.7, 8.2, 1.8, 9.0, 0, 0, 0, 0, 0, 0};
- 最后初始化為0。
- 遍歷陣列
- 如果當前值 (i) == 0,則回傳最后一個。
- 否則回傳我
double last = 0;
for(double i : array1) {
last = i == 0 ? last : i;
}
System.out.println(last);
列印 9.0
uj5u.com熱心網友回復:
tl;博士
Arrays
.stream( myArray )
.filter( d -> d != 0 )
.reduce( ( first , second ) -> second )
DoubleStream
不一定是最好的方法,但我們可以使用流。具體來說,DoubleStream。
從我們的陣列生成流后,過濾掉零值。然后通過呼叫檢索最后一個元素reduce。
我們最終得到一個OptionalDouble物件,該物件要么包含我們生成的double原語,要么為空,這意味著在我們的原始陣列中找不到匹配項。
double[] doubles = { 1.0d , 2.2d , 3.3d, 0d , 0d } ;
OptionalDouble result =
Arrays
.stream( doubles )
.filter( d -> d != 0 )
.reduce( ( first , second ) -> second )
;
轉儲到控制臺。
System.out.println( result ) ;
請參閱在 IdeOne.com 上實時運行的代碼。
可選雙[3.3]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/454299.html
上一篇:如何回圈遍歷兩組數字?
下一篇:React所有評論選項一鍵出現
