我遇到以下问题:
boolean sameStepShape(int [] a,int [] b)检查两个参数数组a和b是否是相同的整体形状,因为每个位置i在两个数组中具有相同的分类(上级,下级或平台) 。 (您的方法可能假设a和b具有相同的长度。)
public boolean sameStepShape(int[] a, int[] b) {
boolean sameStep = true;
for (int i = 0; i < a.length - 1; i++) {
if(a[i] < a[i+1] && b[i] < b[i+1]){
return sameStep;
}
else if(a[i] > a[i+1] && b[i] > b[i+1]) {
return sameStep;
}
else if(a[i] == a[i+1] && b[i] == b[i+1]) {
return sameStep;
}
}
return sameStep = false;
}
但是,这段代码没有通过测试类,我不太清楚为什么。我有点难过。如果有人可以提供任何意见,我们将不胜感激。
编辑:道歉,我忘了提供这条信息:“基于某个数组位置i中的值如何与其后继位置i + 1中的值进行比较,如果a [i]&lt; a [i + 1],则数组a中的每个位置i被分类为上升步],如果a [i]> a [i + 1]则下降,如果a [i] == a [i + 1]则下降。数组的最后位置没有这样的分类,因为没有我们可以将其价值与其进行比较的后继元素。“
答案 0 :(得分:0)
您可以将其分解为两个问题,创建一个步骤数组以确定值是上升还是下降,然后确定步骤数组是否相等:
public static void main(String args[]){
int[] a1 = {1, 2, 3, 4, 9, 8};
int[] a2 = {1, 2, 3, 5, 9, 7};
char[] s1 = getStepArray(a1);
char[] s2 = getStepArray(a2);
System.out.println(isEqual(s1, s2));
}
public static char[] getStepArray(int[] arr){
char[] stepArr = new char[arr.length-1];
for (int i = 0; i < arr.length - 1; i++) {
if(arr[i] < arr[i+1]){
stepArr[i] = 'd';
}
else if(arr[i] > arr[i+1]) {
stepArr[i] = 'u';
}
else if(arr[i] == arr[i+1]) {
stepArr[i] = 'p';
}
}
return stepArr;
}
public static boolean isEqual(char[] arr1, char[] arr2){
for(int i = 0; i < arr1.length; i++){
if(arr1[i] != arr2[i]){
return false;
}
}
return true;
}
现在你的代码无效,因为如果任何值相等,你会立即返回true:
if(a[i] < a[i+1] && b[i] < b[i+1]){
return sameStep;
}
但是你想以另一种方式去做,如果任何值不相等则返回false:
if((a[i] < a[i+1]) != (b[i] < b[i+1])){
return false; //return false here since they are not the same
}
与其他if语句相同。由于只有一个值为false意味着数组不相等,但只有一个值为true并不意味着数组相等。
答案 1 :(得分:0)
我刚才想到了这一点,但我想我会在这里发布解决方案,供所有人查看。
public boolean sameStepShape(int[] a, int[] b) {
boolean sameStep = false;
for (int i = 0; i < a.length - 1; i++) {
if((a[i] < a[i+1]) && (b[i] >= b[i+1])){
return sameStep;
}
else if((a[i] > a[i+1]) && (b[i] <= b[i+1])) {
return sameStep;
}
else if((a[i] == a[i+1] && b[i] != b[i+1])) {
return sameStep;
}
}
return sameStep = true;
}
答案 2 :(得分:-2)
试试这个
public sameStepShape(int[] array1, int[] array2) {
if (array1.length != array2.length)
return false;
for (int i = 0; i < array1.length; i++)
if (array1[i] != array2[i])
return false;
return true;
}