移入列算法:移字母不起作用

时间:2019-11-15 01:09:29

标签: java algorithm

我想创建一个二维数组以输入字母,然后将字母移到数组中的下一个值。所以我有以下程序:

public class AlgorithmOfShiftedInColumn {
public static char[] alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();

/**
 * source : http://www.codeurjava.com/2017/10/java-supprimer-un-element-dun-tableau.html
 * @param a     array
 * @param del   index of the item to delete
 */
public static void removeElement(char[] a, int del) {
    System.arraycopy(a,del+1,a,del,a.length-1-del);
}

public static void main(String[] args) {
    char[][] arrayAlgorithm = new char[26][26];
    for (int i = 0; i < alphabet.length; i++) {
        arrayAlgorithm[i] = alphabet;
        char temporaryLetter;
        temporaryLetter = alphabet[0];
        removeElement(alphabet, 0);
        alphabet[alphabet.length - 1] = temporaryLetter;
    }
    for (int i = 0; i < alphabet.length; i++) {
        System.out.println(arrayAlgorithm[i]);
    }
}

但是,与其按照我的需要打印数组:

ABCDEFGHIJKLMNOPQRSTUVWXYZ
BCDEFGHIJKLMNOPQRSTUVWXYZA
CDEFGHIJKLMNOPQRSTUVWXYZAB
[...]

相反,它向我显示:

ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
[...]

尝试进行一些调试后,我注意到对 alphabet 所做的更改也对我的 arrayAlgorithm 数组中的元素产生了影响,而我并未对其进行修改。 您是否知道此问题的原因?您是否有避免这种情况的方法,或者有其他更轻松地做我想做的事情的方法? 谢谢!

1 个答案:

答案 0 :(得分:1)

您尚未创建 alphabet 数组 arrayAlgorithm [i] 的新副本,该副本指向与字母相同的参考位置,因此现有数组也将更改。使用 copyOf 创建阵列的新副本。

Array.copyOf()在堆上分配新数组对象(具有第二个参数指定的大小),将现有数组的内容复制到其中,然后将对新数组的引用返回给您。

arrayAlgorithm[i] = Arrays.copyOf(alphabet,alphabet.length);