Java 拆分数组的输出不符合预期

Java 拆分数组的输出不符合预期,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

给定一个整数数组作为输入,如果可以将数组一分为二,使左边的数字之和等于右边的数字之和,则返回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.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我写的代码。你的代码在我学到的所有情况下都运行良好。基于你的想法,我为此编写了代码。非常感谢你。