用new的方式传入数组获得其中不一样的数值时可以获得正确结果,改成工具类后答案不正确
package task3_1;
public class CoinUtil {
private int[] arr;
public CoinUtil(int[] arr){
this.arr=arr;
}
public int Find(int a, int b){
//如果传入的下标相同,代表只剩一个数组
if (a==b){
return a;
}
//用结束下标减去开始下标加一获得传过来的数组长度
int len= b-a+1;
//把数组分成四份,计算前三份的长度
int size=(len-len%3)/3;
//根据前三份数组对应的下标求数组的和
int sum1,sum2,sum3;
sum1=sum(arr,a,a+size-1);
sum2=sum(arr,a+size,a+2*size-1);
sum3=sum(arr,a+2*size,a+3*size-1);
//第一份数组的和以其他两份的大小都不一样,代表假币就在里面
if (sum1!=sum2&&sum1!=sum3){
return Find(a,a+size-1);
//第二份数组的和以其他两份的大小都不一样,代表假币就在里面
} else if (sum2!=sum1&&sum2!=sum3) {
return Find(a+size,a+2*size-1);
//第三份数组的和以其他两份的大小都不一样,代表假币就在里面
} else if (sum3!=sum1&&sum3!=sum2) {
return Find(a+2*size,a+3*size-1);
//代表假币不在这三份数组里面而在没被划分进数组的那堆零散的部分里
}else return Find(a+3*size,a+len-1);
}
//获取数组下标a,b之间的和(包含a,b)
public static int sum(int[] arr,int a,int b){
int sum=0;
for (int i = a; i <= b; i++) {
sum=sum+arr[i];
}
return sum;
}
}
new CoinUtil来调用Find 结果是5
package task3_1;
public class test {
public static void main(String[] args) {
int[] arr={1,1,1,1,1,2,1,1,1};
CoinUtil cu=new CoinUtil(arr);
int index=cu.Find(0,arr.length-1);
System.out.println(index);
}
}
改成工具类
package task3_1;
public final class CoinUtil {
private CoinUtil(){}
public int Find(int[] arr,int a, int b){
//如果传入的下标相同,代表只剩一个数组
if (a==b){
return a;
}
//用结束下标减去开始下标加一获得传过来的数组长度
int len= b-a+1;
//把数组分成四份,计算前三份的长度
int size=(len-len%3)/3;
//根据前三份数组对应的下标求数组的和
int sum1,sum2,sum3;
sum1=sum(arr,a,a+size-1);
sum2=sum(arr,a+size,a+2*size-1);
sum3=sum(arr,a+2*size,a+3*size-1);
//第一份数组的和以其他两份的大小都不一样,代表假币就在里面
if (sum1!=sum2&&sum1!=sum3){
return Find(arr,a,a+size-1);
//第二份数组的和以其他两份的大小都不一样,代表假币就在里面
} else if (sum2!=sum1&&sum2!=sum3) {
return Find(arr,a+size,a+2*size-1);
//第三份数组的和以其他两份的大小都不一样,代表假币就在里面
} else if (sum3!=sum1&&sum3!=sum2) {
return Find(arr,a+2*size,a+3*size-1);
//代表假币不在这三份数组里面而在没被划分进数组的那堆零散的部分里
}else return Find(arr,a+3*size,a+len-1);
}
//获取数组下标a,b之间的和(包含a,b)
public static int sum(int[] arr,int a,int b){
int sum=0;
for (int i = a; i <= b; i++) {
sum=sum+arr[i];
}
return sum;
}
}
调用工具类输入参数,结果是10
package task3_1;
public class test {
public static void main(String[] args) {
int[] arr={1,1,1,1,1,2,1,1,1};
int index=CoinUtil.sum(arr,0,arr.length-1);
System.out.println(index);
}
}
我哪步错了嘞?