我试图创建一个方法,将2个int数组作为输入参数,如果数组是反向则返回true,否则返回false。这是我到目前为止所做的,但这是错误的。
public static void main(String[] args)
{
int b,a;
int[] data1 = {14,-70,-18,88,85,97,-65,13,-71,-12};
int[] data2 = {-12,-71,13,-65,97,85,88,-18,-70,14};
boolean check = true;
for (a=0;a<data1.length;a++)
{
for (b=data2.length-1;b>=0;b=b-1)
{
if (data1[a] != data2[b])
check=false
}
}
System.out.println(check);
}
我的例子是假设打印为true但它没有。我假设2个数组的长度相同。有人可以帮忙吗?
答案 0 :(得分:7)
你不需要两个循环 - 你只需要循环一次,使用一个数组中的“normal”索引,另一端使用另一个数组:
public static boolean checkReversed(int[] x, int[] y)
{
// For production code, possibly add nullity checks here (see comments)
if (x.length != y.length)
{
return false;
}
// Loop through x forwards and y backwards
for (int i = 0; i < x.length; i++)
{
if (x[i] != y[y.length - 1 - i])
{
// As soon as we've found a "mistake" we can exit:
// This is simpler (IMO) than keeping a "check" variable
return false;
}
}
return true;
}
答案 1 :(得分:3)
您可以尝试:
// compare the length.
check = (data1.length != data2.length)?false:true;
// if lengths are equal..go ahead and compare elements in reverse.
if(check) {
for(int i=0,j=data2.length;(i<data1.length) && (j>=0);i++,j--) {
// if you find a mismatch..set check to false..and break
// no need to compare other ele.
if(data1[i] != data2[j]) {
check = false;
break;
}
}
}
答案 2 :(得分:2)
在这里,两个数组长度应该相等。然后
for(int i=0,j=array.length;i<array.length,j=0;i++,j--){
write your comparison logic here
}
答案 3 :(得分:2)
您的代码实际上将data1中的每个元素与data2中的每个元素进行比较,如果存在任何一个不匹配,则打印为false。这不是你打算做的。
答案 4 :(得分:2)
这是一个完整的.java文件中你的问题的答案
//yeah.java
public class yeah {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] data1 = {14,-70,-18,88,85,97,-65,13,-71,-12};
int[] data2 = {-12,-71,13,-65,97,85,88,-18,-70,12};
System.out.println(isReverse(data1, data2));
}
public static boolean isReverse(int[] a, int[] b)
{
if (a.length != b.length) //If a and b are not of the same length how can they be reverse?
return false;
for (int i=0;i<a.length;i++)
if (a[i] != b[a.length-i-1])
return false;
return true;
}
}
只是关于方法和函数的快速说明..一旦发现它们没有被反转,你应该使用return语句退出..不需要继续计算..
答案 5 :(得分:1)
你可以在一个循环中完成,你不需要两个。
for (int i=0,j=end;i<end;i++,j--)
答案 6 :(得分:0)
这可以在一个循环中完成,不需要两个循环。
例如:
for (int i = 0, j = last; i < last; i++, j--)