如何在 Java 中获取数组中最后一个不为零的数字
How to obtain the last number different to zero in an array in Java
例如我有这个数组:
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 获得。
此外,所有的数字都是正数。
您需要从数组的末尾开始,而不是开头:
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();
}
}
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 ) ;
看到这个code run live at IdeOne.com。
OptionalDouble[3.3]
这是使用循环和三元运算符的一种方法(a ? b : c
表示如果 a 为真 return b
,否则 return c
)
double array1[] = {2.3, 5.0, 4.7, 8.2, 1.8, 9.0, 0, 0, 0, 0, 0, 0};
- 将 last 初始化为 0。
- 遍历数组
- 如果当前值 (i) == 0,return 最后一个。
- 其他return我
double last = 0;
for(double i : array1) {
last = i == 0 ? last : i;
}
System.out.println(last);
打印
9.0
例如我有这个数组:
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 获得。
此外,所有的数字都是正数。
您需要从数组的末尾开始,而不是开头:
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();
}
}
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 ) ;
看到这个code run live at IdeOne.com。
OptionalDouble[3.3]
这是使用循环和三元运算符的一种方法(a ? b : c
表示如果 a 为真 return b
,否则 return c
)
double array1[] = {2.3, 5.0, 4.7, 8.2, 1.8, 9.0, 0, 0, 0, 0, 0, 0};
- 将 last 初始化为 0。
- 遍历数组
- 如果当前值 (i) == 0,return 最后一个。
- 其他return我
double last = 0;
for(double i : array1) {
last = i == 0 ? last : i;
}
System.out.println(last);
打印 9.0