[英](How) Can I make this Array code look better? (Codingbat - Array-1 sum2)
我是这个论坛和编程的新手,我有我的第一个问题:)
目标是返回数组中前两个整数的和。 我的解决方案在我添加的图片中。 有没有办法用更少的 if 来解决这个问题? (我知道我不必执行 for 循环,但我刚刚学会了它并想尝试一下:D)
谢谢大家的回答!
https://i.stack.imgur.com/hx06s.png
编辑:这是我的代码:
public int sum2(int[] nums) {
int sum = 0;
if(nums.length == 0){
return sum;
}
if(nums.length == 1){
return nums[0];
}
for(int i = 0; i < 2; i++){
sum += nums[i];
}
return sum;
}
您可以在流中使用 limit() 方法
public long sum2(int[] nums) {
return Arrays.stream(nums).limit(2).sum();
}
你可以用这种简单的方式处理它:
public int sum2(int[] nums) {
if (nums.length == 0)
return 0;
if (nums.length == 1)
return nums[0];
return nums[0] + nums[1];
}
你不能从代码中删除两个if
语句,除非你想让它不必要地复杂化,例如@axurefrog 在他的评论中写道:
public int sum2(int[] nums) {
int sum = 0;
for (int i = 0; i < nums.length && i < 2; i++)
sum += nums[i];
return sum;
}
您可以简单地执行此操作,而不会出现 if-else 问题
public int sum2(int[] nums)
{
int sum = 0;
for(int i = 0; i < nums.length && i < 2; i++) sum+=nums[i];
return sum;
}
编辑:根据 Luca Murra 的评论,在 for 循环条件中添加i < nums.length
以处理空数组
这将返回数组的前 n 个值的总和:
public int sum(int[] arr, int n) {
int sum = 0;
int num = Math.min( arr.length, n );
for( int i=0; i < num; i++ ) {)
sum += arr[i];
}
return sum;
}
我是这个论坛和编程的新手,我有第一个问题:)
目的是返回数组中前两个整数的和。 我的解决方案在我添加的图片中。 有没有办法用更少的案例来解决这个问题? (我知道我不必执行for循环,但是我只是学到了,想尝试一下:D)
感谢您的所有答案!
https://i.stack.imgur.com/hx06s.png
编辑:这是我的代码:
public int sum2(int[] nums) {
int sum = 0;
if(nums.length == 0){
return sum;
}
if(nums.length == 1){
return nums[0];
}
for(int i = 0; i < 2; i++){
sum += nums[i];
}
return sum;
}
这里有两个看起来“更好”的替代解决方案:
sum2()
带switch
所以没有 if语句sum3()
带有nested ternary
表达式,使其非常短。 避免多次return
是一种很好的做法,这样您就可以保留算法的单个入口 - 简单的出口点,支持调试。
我已经把代码片段打包好了,这样你就可以通过一次复制/粘贴来尝试它们。
public class Main{
public static int sum2(int[] nums) {
int sum = 0;
switch (nums.length) {
case 0:
break;
case 1:
sum = nums[0];
break;
default:
sum = nums[0] + nums[1];
break;
}
return sum;
}
public static int sum3(int[] nums) {
return nums.length == 1 ? nums[0] : nums.length >= 2 ? nums[0] + nums[1] : 0;
}
public static void main(String []args){
int[] nums1 = {11, 13, 1, 0}; // expected: 24
int[] nums2 = {3}; // expected: 3
int[] nums3 = {}; // expected: 0
System.out.println("sum2: " + sum2(nums1));
System.out.println("sum2: " + sum2(nums2));
System.out.println("sum2: " + sum2(nums3));
System.out.println(' ');
System.out.println("sum3: " + sum3(nums1));
System.out.println("sum3: " + sum3(nums2));
System.out.println("sum3: " + sum3(nums3));
}
}
输出:
sum2: 24
sum2: 3
sum2: 0
sum3: 24
sum3: 3
sum3: 0
如果您使用的是Java8
或更高版本,并且想要一个更通用的解决方案(意思是 N 个数字的总和),您可以使用如下流:
public long sum2(int[] nums) {
return Arrays.stream(nums).sum();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.