有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么检查多个条件会返回不正确的结果

给定一个整数数组,可以将整数分成两组吗?一组的和是10的倍数,另一组的和是奇数。每个int必须在一个组或另一个组中。编写一个递归助手方法,该方法接受您喜欢的任何参数,并从splitOdd10()对递归助手进行初始调用。(不需要循环。)

这是我的解决方案代码:(是的,我使用了两个助手方法,而不是一个) 这就是我试图解决问题的方式:(如果我做错了,请纠正我)

nums中的每个数字只能在其中一个组中结束,group1group2。对于这种情况,元素进入group1-group1 += nums[start],并以这种方式对nums中的每个元素进行递归,直到传递最后一项,其中索引start超出nums-start >= nums.length的范围。这样做之后,我们在这个可能的“树”的所有分支的末尾有两个组group1group2。然后检查是否有两个组,一个组的和是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) 个答案