2016-05-22 33 views
0

我想翻转一个数组从0到索引n,所有翻转的元素应该颠倒过来。翻转阵列部分

如果我请翻转(A,2) 我的愿望结果是

true, false, true , true, false 

(从0到2向后selcted阵列的一部分,并且该值反相)

public class test{ 

public static void main(String[] args) { 
    Boolean[] A = { false, true, false, true, false }; 

    A = Flip(A, 4); 

    print(A); 
} 

public static Boolean[] Flip(Boolean[] A, int n) { 
    Boolean[] Atemp = A; 

    for (int i = 0; i <= n; i++) { 
     Atemp[i] = !A[n - i]; 
    } 

    return Atemp; 
} 

public static void print(Boolean[] A) { 
    for (Boolean b : A) 
     System.out.println("" + b); 

    System.out.println(); 
} 

} 

但结果我得到的是

true,false,false,true,false 

是在疗法我的代码中的错误(最有可能) 还是有涉及Java特定的错误。

感谢您的帮助

+1

在循环中将'i <= n'更改为'i Gendarme

+0

Thx,但现在Flip(A,2)仍然是错误的 – Doren

回答

1

有几个问题与您的代码:

  1. 没有关系只会翻转阵列,但也会颠倒它。猜猜这只是规范中的一个错误。
  2. 您的代码尝试就地反转该数组,但未正确实现。
  3. 您的代码具有n作为包含上限,但规范声明它应该是排他性的。

至于第1点:假设这只是规范的问题,我们可以忽略这一点。

点3:刚刚从

for (int i = 0; i <= n; i++) 

改变for循环来

for (int i = 0; i < n; i++) 

以获得所需的行为。

点2:
在这里,我们可以采取几种方法:真正实现就地反转:

public static Boolean[] Flip(Boolean[] A, int n) { 
    for (int i = 0; i < n/2.0; i++) { 
     boolean tmp = A[i]; 
     A[i] = !A[n - i - 1]; 
     A[n - i - 1] = !tmp; 
    } 

    return A; 
} 

或创建数组的副本,并反转该副本内:

public static Boolean[] Flip(Boolean[] A, int n) { 
    Boolean[] Atemp = Arrays.copyOf(A , A.length); 

    for (int i = 0; i < n; i++) { 
     Atemp[i] = !A[n - i - 1]; 
    } 

    return Atemp; 
} 

并且没有必要使用Boolean[]。只需使用原始类型boolean[]

未来的提示:实际上可以使用调试器进行调试,或者如果您更愿意通过简单更改代码来反转int[]而不是boolean[]。只需使用{1, 2, 3, 4, 5, ...}就会发现单个元素会发生什么变化。

+0

thx,方法应该颠倒选定范围从0到n的顺序,然后颠倒每个索引的值,从0到n。 如果这是有道理的。 Sry它迟到了,我不是最好的英文作家 – Doren

+0

@Doren在这种情况下,你应该更新问题以符合代码的要求。无论如何,我的代码确实如此。我只是将第1点(不正确的规格)视为理所当然 – Paul

2

首先,你可以使用一个boolean[](无需Boolean[])。其次,当您将参考从A分配到Atemp时,您不复制数组(将参考值传递给该函数)。您需要从0 < n开始迭代,并在每个索引处翻转数组(不针对偏移量)。最后,Java命名约定将使用flip(因为Flip看起来像一个类名)。

public static void flip(boolean[] arr, int n) { 
    for (int i = 0; i < n; i++) { 
     arr[i] = !arr[i]; 
    } 
} 

然后,你可以这样调用它

public static void main(String[] args) { 
    boolean[] arr = { false, true, false, true, false }; 
    flip(arr, 4); 
    System.out.println(Arrays.toString(arr)); 
} 

我也得到(的要求)

[true, false, true, false, false]