java为什么检查多个条件会返回不正确的结果
给定一个整数数组,可以将整数分成两组吗?一组的和是10的倍数,另一组的和是奇数。每个int必须在一个组或另一个组中。编写一个递归助手方法,该方法接受您喜欢的任何参数,并从splitOdd10()对递归助手进行初始调用。(不需要循环。)
这是我的解决方案代码:(是的,我使用了两个助手方法,而不是一个) 这就是我试图解决问题的方式:(如果我做错了,请纠正我)
nums
中的每个数字只能在其中一个组中结束,group1
或group2
。对于这种情况,元素进入group1-group1 += nums[start]
,并以这种方式对nums
中的每个元素进行递归,直到传递最后一项,其中索引start
超出nums
-start >= nums.length
的范围。这样做之后,我们在这个可能的“树”的所有分支的末尾有两个组group1
和group2
。然后检查是否有两个组,一个组的和是10的倍数,另一个组的和是奇数compare(group1, group2)
我认为,这就是我的代码行为不端的地方——在对compare(group1,group2)
的调用中。我试着,如果group1
是10的倍数,group 2
是奇数-if( a%10 == 0 && b%2 == 1) return true;
,然后,因为我们不知道发生了相反的情况,结果group1
是奇数,group2
是10的倍数,我也检查一下if( a%2 == 1 && b%10 == 0 ) return true;
这并不适用于所有情况Here is a screenshot of code output in codingbat.com。但是注释掉compare(group1,group2
的第一个条件神奇地修复了它Here is a working code
public boolean splitOdd10(int[] nums) {
return( splitter(nums,0,0,0) );
}
public boolean splitter(int [] nums,int start, int group1, int group2){
if (start >= nums.length ) return compare(group1,group2);
if( splitter(nums,start + 1, group1 += nums[start], group2 ) ) return true; // first condition add element in group1 and recurse on
if( splitter(nums,start + 1, group1, group2 += nums[start] ) ) return true;// second condition add element to group2
return false;
}
public boolean compare( int a, int b){
if( a%10 == 0 && b%2 == 1) return true;// <--- if I remove this line the code works
if( a%2 == 1 && b%10 == 0 ) return true;
return false;
}
我的问题是:我们如何“知道”哪一组是奇数,哪一组是10的倍数?我检查了两组的这两种情况,但显然这是错误的,对于某些数组,并没有返回正确的结果。例如,它为数组[10,0,5,5]返回'true'而不是'false'。请帮助我理解为什么检查这两种情况都不正确
共 (0) 个答案