测试数组是否相互反转的方法未通过测试
Method to test if arrays are the reverse of each other not passing test
我应该创建一个方法来测试两个数组是否具有相同的值,但顺序相反。
public static boolean areReversed (int [] t , int [] q)
{
boolean identical = false;
if(t.length != q.length){ identical = false;}
else{
for(int x = (t.length -1) , y = 0; -1 < x; x-- , y++)
{
if(t[y] == q[x])
{
identical = true;
}
}
}
return identical;
}
我通过这些 if 语句和以下预先确定的数组 运行 测试它
int[] a = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
int[] b = {0, 9, 8, 7, 6, 5, 4, 3, 2, 1};
int[] c = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int[] d = {9, 8, 7, 6, 5, 4, 3, 2, 1};
int[] e = {1, 2, 3, 4, 5, 4, 3, 2, 1};
int[] f = {1, 2, 3, 4, 4, 3, 2, 1};
int[] g = {1, 3, 5, 7, 9, 0, 2, 4, 6, 8};
int[] h = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
int[] i = {1, 1, 3, 3, 5, 5, 7, 7, 9, 9};
//test for areReversed, uncomment the next two lines to test your method
if(areReversed(a, b) && !areReversed(a, g) && !areReversed(a, c)) System.out.println("Basic areReversed method test PASSED");
else System.out.println("Basic areReversed method test FAILED");
我的方法没有通过测试,我是不是在我的代码某处疏忽了?
是的,您正在以相同的顺序索引两个数组。您实质上是在检查它们是否相等,而不是它们彼此相反。
此外,请记住函数可以在任何时候 return 考虑一下这一点,并考虑在数组如下所示的情况下如何使您的函数更高效:
[1,2,3] 和 [4,2,4].
您实际上需要进行多少次比较才能告诉我们数组不一样。
这是你应该做的:
public static boolean areReversed (int [] t , int [] q)
{
if(t.length != q.length) return false;
for(int x = (t.length -1) , y = 0; -1 < x; x-- , y++)
{
if(t[y] != q[x]) return false;
}
return true;
}
请注意,当已知反向数组不相等时,我从方法返回 false
。因此,最后,如果 false
还没有返回,数组必须反转相等,因此返回 true
。
我应该创建一个方法来测试两个数组是否具有相同的值,但顺序相反。
public static boolean areReversed (int [] t , int [] q)
{
boolean identical = false;
if(t.length != q.length){ identical = false;}
else{
for(int x = (t.length -1) , y = 0; -1 < x; x-- , y++)
{
if(t[y] == q[x])
{
identical = true;
}
}
}
return identical;
}
我通过这些 if 语句和以下预先确定的数组 运行 测试它
int[] a = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
int[] b = {0, 9, 8, 7, 6, 5, 4, 3, 2, 1};
int[] c = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int[] d = {9, 8, 7, 6, 5, 4, 3, 2, 1};
int[] e = {1, 2, 3, 4, 5, 4, 3, 2, 1};
int[] f = {1, 2, 3, 4, 4, 3, 2, 1};
int[] g = {1, 3, 5, 7, 9, 0, 2, 4, 6, 8};
int[] h = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
int[] i = {1, 1, 3, 3, 5, 5, 7, 7, 9, 9};
//test for areReversed, uncomment the next two lines to test your method
if(areReversed(a, b) && !areReversed(a, g) && !areReversed(a, c)) System.out.println("Basic areReversed method test PASSED");
else System.out.println("Basic areReversed method test FAILED");
我的方法没有通过测试,我是不是在我的代码某处疏忽了?
是的,您正在以相同的顺序索引两个数组。您实质上是在检查它们是否相等,而不是它们彼此相反。
此外,请记住函数可以在任何时候 return 考虑一下这一点,并考虑在数组如下所示的情况下如何使您的函数更高效:
[1,2,3] 和 [4,2,4].
您实际上需要进行多少次比较才能告诉我们数组不一样。
这是你应该做的:
public static boolean areReversed (int [] t , int [] q)
{
if(t.length != q.length) return false;
for(int x = (t.length -1) , y = 0; -1 < x; x-- , y++)
{
if(t[y] != q[x]) return false;
}
return true;
}
请注意,当已知反向数组不相等时,我从方法返回 false
。因此,最后,如果 false
还没有返回,数组必须反转相等,因此返回 true
。