在总结前3个元素之后,我在获取其余数字方面遇到了麻烦。这是它问我的问题:"编写一个采用数组的方法。 return true
如果数组中前三个元素的总和小于数组其余元素的总和。"
因此5 5 5 5 2 2
应为false
。由于前3个数字和大于5 2 2
的总和。我的程序对于这个问题返回true,我将不胜感激任何帮助。
public static boolean sumThree(int [] myArray)
{
int sum = 0;
for(int i = 0; i < myArray.length; i++)
{
sum += myArray[i];
}
int sumof3E = myArray[0] + myArray[1] + myArray[2];
if(sum > sumof3E)
{
return true;
}
else if(sumof3E < sum)
{
return false;
}
else
{
return false;
}
}
答案 0 :(得分:0)
您的代码中存在两个问题:
1)在索引数组之前,你不能验证数组是否有3个元素,这可能会导致错误。
2)您将整个数组求和并将其与前三个元素的总和进行比较...在循环中尝试在循环初始化中初始化i = 3
(假设数组至少有4个)元素)
伪代码:
public static boolean sumThree(int [] myArray)
{
if (myArray.length < 4) { return false; }
var first = myArray[0] + myArray[1] + myArray[2];
var rest = 0;
for(int i = 3; i<myArray.length; i++) {
rest += myArray[i];
}
return first < rest;
}
答案 1 :(得分:0)
您不应该包含数组的前三个元素。那些必须排除总和。
将for循环控制变量更改为:
for (int i = 3; i < myArray.length; i++) {
sum += myArray[i];
}
此外,您应该从代码中删除else if
块,因为它是多余的(第一个if
语句会检查该条件):
else if(sumof3E < sum)
{
return false;
}
或者,借助java 8功能,您可以将代码缩短为一行:
public static boolean sumThree(int [] myArray){
return Arrays.stream(myArray).limit(3).sum() < Arrays.stream(myArray).skip(3).sum();
}
注意 - 使用替代解决方案即使传入的数组为空,也不会获得IndexOutOfBoundsException
。
答案 2 :(得分:0)
需要将sum循环更改为从索引2开始,否则如果不需要。
{{1}}
答案 3 :(得分:0)
当第一笔总和小于休息总和时,没有必要继续经历整个数组:
int sumf3 =0;
int sumRest=0;
for (int i = 0; i < myArray.length; i++)
{
if (i < 3){
sumf3 += myArray[i];
} else {
sumRest += myArray[i];
}
if(sumf3 < sumRest ){
return true;
}
}
return false;
P.S。并且不需要在循环之前检查数组的大小。
答案 4 :(得分:0)
为了清楚起见,做一个两个循环然后使用条件运算符或称为三元运算符来轻松地使用if..else
int sum1=0;
int sum2=0;
for(int i=0;i<=2;++i)
{
sum1+=myArray[i];
}
for(int i=3;i<myArray.length;++i)
{
sum2+=myArray[i];
}
boolean myBool = (sum1>sum2)?false:true;
return myBool;