0

这可能算得上是非常简单的事情,但是由于我的 Comp Sci 课程只有大约 5 周的时间,请原谅我的无知。

作为我们今年成绩的一部分,我们必须实施“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 的语句也对其他两个数组执行相同的操作。

帮助将不胜感激。

4

3 回答 3

2

因为原始数组就像对象一样,它们拥有一个引用。所以在分配时array2[6] = 'P',就像说array[6] = 'P'and 因此array1[6] = 'P'and 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();
于 2013-10-27T10:31:17.773 回答
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();
    }
}   

不要分配数组引用,而是尝试按照其他答案的建议创建新数组

于 2013-10-27T10:33:35.960 回答
0

这是因为您只创建了一个数组,并从 3 个变量中引用了完全相同的数组。

您需要创建 3 个单独的数组,如下所示:

char[] array1 = {'#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#'};
char[] array2 = {'#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#'};
char[] array3 = {'#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#'};
于 2013-10-27T10:30:56.527 回答