我想创建一个二维数组以输入字母,然后将字母移到数组中的下一个值。所以我有以下程序:
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 数组中的元素产生了影响,而我并未对其进行修改。 您是否知道此问题的原因?您是否有避免这种情况的方法,或者有其他更轻松地做我想做的事情的方法? 谢谢!
答案 0 :(得分:1)
您尚未创建 alphabet 数组 arrayAlgorithm [i] 的新副本,该副本指向与字母相同的参考位置,因此现有数组也将更改。使用 copyOf 创建阵列的新副本。
Array.copyOf()
在堆上分配新数组对象(具有第二个参数指定的大小),将现有数组的内容复制到其中,然后将对新数组的引用返回给您。
arrayAlgorithm[i] = Arrays.copyOf(alphabet,alphabet.length);