【问题标题】:How to properly alter the value of an array element in Java?如何正确更改 Java 中数组元素的值?
【发布时间】:2013-10-27 10:27:14
【问题描述】:

这可能算得上是非常简单的东西,但由于我的 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 的语句对其他两个数组也是如此。

我们将不胜感激。

【问题讨论】:

标签: java arrays


【解决方案1】:

因为原始数组就像对象一样,它们拥有一个引用。所以在分配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();

【讨论】:

    【解决方案2】:

    由于您的所有数组都指向相同的引用,因此您打印的值相同

    您可以创建一个函数来打印数组,以避免冗余代码

    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();
        }
    }   
    

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

    【讨论】:

      【解决方案3】:

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

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

      char[] array1 = {'#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#'};
      char[] array2 = {'#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#'};
      char[] array3 = {'#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#'};
      

      【讨论】:

        猜你喜欢
        • 2015-05-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-28
        • 2020-05-23
        • 2022-06-18
        • 1970-01-01
        相关资源
        最近更新 更多