Java 拆分数组的输出不符合预期
给定一个整数数组作为输入,如果可以将数组一分为二,使左边的数字之和等于右边的数字之和,则返回true MyApproach 我从前面和后面加上元素,直到它们长度的一半,然后加上它们的和。当我发现它们相等时,我返回true,否则返回falseJava 拆分数组的输出不符合预期,java,arrays,Java,Arrays,给定一个整数数组作为输入,如果可以将数组一分为二,使左边的数字之和等于右边的数字之和,则返回true MyApproach 我从前面和后面加上元素,直到它们长度的一半,然后加上它们的和。当我发现它们相等时,我返回true,否则返回false public boolean canSplit(int[] arr) { int k=0; int SumF[]=new int[1]; int SumB[]=new int[1]; for(int i=0;i<arr
public boolean canSplit(int[] arr)
{
int k=0;
int SumF[]=new int[1];
int SumB[]=new int[1];
for(int i=0;i<arr.length/2;i++)
{
SumF[k]=arr[i]+SumF[k];
}
for(int j=arr.length-1;j>=arr.length/2;j--)
{
SumB[k]=arr[j]+SumB[k];
}
if(SumF==SumB)
return true;
else
return false;
}
Parameters Actual Output Expected Output
'{10,11,12,5,4}' false true
public boolean canSplit(int[]arr)
{
int k=0;
int SumF[]=新int[1];
int SumB[]=新int[1];
对于(int i=0;i=arr.length/2;j--)
{
SumB[k]=arr[j]+SumB[k];
}
if(SumF==SumB)
返回true;
其他的
返回false;
}
参数实际输出预期输出
“{10,11,12,5,4}”假-真
我的问题:谁能告诉我我做错了什么
问题不在于一分为二,而在于一分为二。现在,您只需检查一种分割阵列的特定方法。你必须检查所有的方法 一种方法是找到数组中所有数字的总和,然后循环这些数字,计算到该位置的所有数字的运行总和,看看这是否是总数的一半
public static boolean canSplit(int[] array) {
int total = IntStream.of(array).sum();
int sum = 0;
for (int i : array) {
sum += i;
if (sum == total - sum) return true;
}
return false;
}
问题不是说子阵列必须具有相同的大小?您确定它们的大小必须相同吗?`int-SumF[]=new-int[1];,int SumB[]=新的int[1];`,为什么不直接使用
int
为什么要将总和存储到整数数组中
大小为1?为什么不使用int
?@SaviourSelf是的,我的错误。我可以用一个变量来存储它们的值。看起来您有很多错误:一个是测试两个分别分配的数组的标识。在您的代码中,这总是错误的。更重要的是,我认为这个问题没有得到理解。使用您显示的参数:a)长度不均匀,因此不能将其拆分为两半;b)10+11=>21,以及12+5+4=>21。您需要创建两个和(INT),而不是两个数组(SumF
和SumB
)。很好的一个。我希望我的作业能这么容易;-)@tobias_k我的代码用于输入({10,11,12,5,4}),{1,3,5,-3,-5,2,-1,0,1,-1}。但是我没有得到预期的输出。@Jasonara对我来说很好,返回true
。你得到了什么?@Jasonarra当你说“我的代码”时,你是指你最初的问题中的代码,还是你运行它时我的答案中的代码?@tobias__k我写的代码。你的代码在我学到的所有情况下都运行良好。基于你的想法,我为此编写了代码。非常感谢你。