【问题标题】:Values for char arrays keep changingchar 数组的值不断变化
【发布时间】:2014-03-23 06:43:10
【问题描述】:

我有两个不同的二维数组,用于以如下形式存储地图:

 [#, #, #, #, #, #, #, #, #, #, #, #, #, #, #, #, #, #, #]
 [#, ., ., ., ., ., ., ., ., ., ., ., ., ., ., ., ., ., #]
 [#, ., ., ., ., ., ., G, ., ., ., ., ., ., ., ., E, ., #]
 [#, ., ., ., ., ., ., ., ., ., ., ., ., ., ., ., ., ., #]
 [#, ., ., E, ., ., ., ., ., ., ., ., ., ., ., ., ., ., #]
 [#, ., ., ., ., ., ., ., ., ., ., G, ., ., ., ., ., ., #]
 [#, ., ., ., ., ., ., ., ., ., ., ., ., ., P, ., ., ., #]
 [#, ., ., ., ., ., ., ., ., ., ., ., ., ., ., ., ., ., #]
 [#, #, #, #, #, #, #, #, #, #, #, #, #, #, #, #, #, #, #]

我已将此分配给变量 mapArrayGlobal,但是当我调用方法 createBlankArray() 时,它似乎会更改此变量。我的类的完整代码如下:

 static int Column, Row, goldNumber;
int goldCount = 0;
char [][] mapArrayGlobal, mapBlank;
boolean goldMarker = false;
boolean exitSet = false;

public void setPosition(int rows, int column, char [][] TwoDArray, int goldValue){
    goldNumber = goldValue;
    Column = randInt(1, column - 1);
    Row = randInt(1, rows - 2);

    mapArrayGlobal = TwoDArray;
    mapBlank = mapArrayGlobal;

    if(mapArrayGlobal[Row][Column] == '#'){
        setPosition(rows, column, TwoDArray, goldValue);
    }
    else if(mapArrayGlobal[Row][Column] == 'G'){
        goldMarker = true;
        mapArrayGlobal[Row][Column] = 'P';
    }
    else{
        mapArrayGlobal[Row][Column] = 'P';
    }
    createBlankArray(TwoDArray);
}

public void createBlankArray(char [][] array){
    printArray(array);
    for(int i = 1; i < array.length - 1; i++){
        for(int j = 1; j < array[0].length - 1; j++){
            mapBlank[i][j] = '?';
        }   
    }
    printArray(mapBlank);
    printArray(mapArrayGlobal);
}

public static int randInt(int min, int max) {

    Random rand = new Random();

    int randomNum = rand.nextInt((max - min) + 1) + min;

    return randomNum;
}

在这段代码的最后,mapArrayGlobal 和 mapBlank 的值都是:

 [#, #, #, #, #, #, #, #, #, #, #, #, #, #, #, #, #, #, #]
 [#, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, #]
 [#, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, #]
 [#, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, #]
 [#, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, #]
 [#, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, #]
 [#, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, #]
 [#, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, #]
 [#, #, #, #, #, #, #, #, #, #, #, #, #, #, #, #, #, #, #]

谁能告诉我这是为什么。

非常感谢:)

【问题讨论】:

    标签: java class object multidimensional-array global-variables


    【解决方案1】:

    实际上,您将TwoDArray 变量的引用(值)传递给createBlankArray 方法。既然你有:

    mapArrayGlobal = TwoDArray;
    mapBlank = mapArrayGlobal;
    

    mapBlank 指向指向TwoDArray 的mapArrayGlobal,因此更改mapBlank 会导致更改TwoDArray 的元素。

    顺便说一句,您不应该以大写字母开头变量/实例名称。命名变量的约定是camelCase

    【讨论】:

    • 感谢您的快速回复,有没有办法解决这个问题?
    • 是的。想到的最简单的事情是让您的 createBlankArray() 方法返回一个具有正确尺寸的“空白”数组 - 可能将尺寸作为参数。
    猜你喜欢
    • 2020-05-09
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    • 2014-06-27
    • 2022-11-27
    • 1970-01-01
    • 2011-12-16
    相关资源
    最近更新 更多