这可能算是非常简单的事情,但由于我只有大约5周的时间进入Comp Sci课程,请原谅我的任何无知。
作为我们今年成绩的一部分,我们必须实施'Spread-and-Die'游戏。此游戏的界面是命令行中的12 x 12 ASCII布局。
我为解决问题所做的代码,而不是我的实际代码,由于长度荒谬,我在这里:
class PrintTest
{
public static void main (String[] args)
{
final char[] array = {'#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#'};
char[] array1 = array;
char[] array2 = array;
char[] array3 = array;
array2[6] = 'P';
System.out.println("\n");
System.out.print (array1[0]);
System.out.print (array1[1]);
System.out.print (array1[2]);
System.out.print (array1[3]);
System.out.print (array1[4]);
System.out.print (array1[5]);
System.out.print (array1[6]);
System.out.print (array1[7]);
System.out.print (array1[8]);
System.out.print (array1[9]);
System.out.print (array1[10]);
System.out.print (array1[11]);
System.out.print("\n");
System.out.print (array2[0]);
System.out.print (array2[1]);
System.out.print (array2[2]);
System.out.print (array2[3]);
System.out.print (array2[4]);
System.out.print (array2[5]);
System.out.print (array2[6]);
System.out.print (array2[7]);
System.out.print (array2[8]);
System.out.print (array2[9]);
System.out.print (array2[10]);
System.out.print (array2[11]);
System.out.print("\n");
System.out.print (array3[0]);
System.out.print (array3[1]);
System.out.print (array3[2]);
System.out.print (array3[3]);
System.out.print (array3[4]);
System.out.print (array3[5]);
System.out.print (array3[6]);
System.out.print (array3[7]);
System.out.print (array3[8]);
System.out.print (array3[9]);
System.out.print (array3[10]);
System.out.print (array3[11]);
System.out.print("\n");
}
}
我也很明显地看到,无法找到如何打印整个数组,因此,鉴于我的解决方案的丑陋,任何提示都会有用。
无论如何,当代码被编译/运行时,我得到了这个:
######P#####
######P#####
######P#####
鉴于我对Java和编程的一般认识有限,只有第二行应该有一个'P'。由于某种原因,array2的语句更改元素6也对其他两个数组执行相同的操作。
非常感谢帮助。
答案 0 :(得分:2)
因为原始数组就像对象,所以它们包含引用。因此,在分配array2[6] = 'P'
时,就像说array[6] = 'P'
,因此array1[6] = 'P'
和array3[6] = 'P'
。
为避免这种情况,您可以在创建阵列时调用方法clone()
。
char[] array1 = array.clone();
char[] array2 = array.clone();
char[] array3 = array.clone();
如果要为阵列复制指定元素,可以使用Arrays.copyOfRange
:
char[] array1 = Arrays.copyOfRange(array, 0, array.length);
^ ^ ^
| | |
| | indice to
| indice from
|
array to be copied
同样要打印数组,可以使用for循环。
for(int i = 0; i < array1.length; i++)
System.out.print(array1[i]);
System.out.println();
答案 1 :(得分:1)
由于您的所有数组都指向相同的引用,因此您将获得相同的值
你可以创建一个打印数组的函数,以避免冗余代码
class PrintTest
{
public static void main (String[] args)
{
final char[] array = {'#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#'};
char[] array1 = array;
char[] array2 = array;
char[] array3 = array;
array2[6] = 'P';
printArr(array1);
printArr(array2);
printArr(array3);
}
public static void printArr(char[] array){
for(int i=0;i<array.length;i++){
System.out.print(array[i]);
}
System.out.println();
}
}
不是分配数组引用,而是尝试按照其他答案的建议创建新数组
答案 2 :(得分:0)
这是因为你只创建了一个数组,并从3个变量引用了完全相同的数组。
您需要创建3个独立的数组,如下所示:
char[] array1 = {'#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#'};
char[] array2 = {'#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#'};
char[] array3 = {'#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#'};