当前位置: 首页 > 知识库问答 >
问题:

如何创建包含ArrayList的二维数组?

司马昕
2023-03-14

如何创建包含ArrayList的二维数组?比如:

ArrayList

可以做以下事情吗:

我需要比较一些人物的位置和我地图上建筑物的位置。几个建筑可以属于同一块瓷砖,但一个可以画在人物前面,另一个可以画在人物后面。在游戏中,每一个角色都必须进行这种比较。

每次角色从一个磁贴移动到另一个磁贴时,我都会尝试更新一个字符数组。然后,渲染方法应该查找特定瓷砖中有多少个字符(如果有的话),并在该瓷砖中的字符上循环,以便在建筑物的前面或后面绘制它们。

比如:

//init
ArrayList<Character>[][] arrayOfCharacters = new ArrayList<Character>[][];

//each tile in the map
for (int y = 0; y < 9; y++){
    for(int x = 9-1; x >= 0; x--){
        if ( arrayOfCharacters[y][x].length > 0 ){
            for ( int i=0, i< arrayOfCharacters[y][x].length; i++ ){
                //compare which building is in front or behind the characters
                //then
                characterInThisTile = index of each character in arrayOfCharacters[y][x] 
                spriteBatch.draw(characterInThisTile, x_pos, y_pos, tileWidth, tileHeight);
            }   
        }

    }
}

共有3个答案

包德业
2023-03-14

您可以创建一个类,然后使用存储ArrayList的类创建对象

首先创建一个具有实例变量ArrayList的类

//Make Objects that will have an ArrayList<Character>
    public class ArrayOfChars {
        private ArrayList<Character> list;
        //Constructor
        public arrayOfChars(){
            this.list = new ArrayList<Character>();
        }
        //Getter
        public ArrayList<Character> getList(){
            return this.list;
        }
        //Setter
        public void setList(ArrayList<Character> list){
            this.list = list;
        }
    } 

现在,您可以使用这个类来创建对象,并将这些对象存储在二维数组中。这些对象可以存储和ArrayList

public static void main(String[] args) {
        ArrayOfChars[][] myLists = new ArrayOfChars[9][9];
        //initialize the 2d array so that it is filled with Empty ArrayList<>'s'
        for (int i = 0; i < 9; i++) {
            for (int j = 0; j < 9; j++) {
                ArrayOfChars thislist = new ArrayOfChars();
                myLists[i][j] = thislist;
            }
        }
        //You can now use it like a 2d array of objects 

这里有一些方法可以使用ArrayList的2D-Array

//Iterate like this
        for (int row = 0; row < 9; row++) {
            for (int col = 0; col < 9; col++) {
                myLists[row][col].getList().get(index);
                //or
                myLists[row][col].setList(list);
            }
        }


        //Add to a list
        myLists[2][5].getList().add(new Character('H'));

        //Set a list of characters
        ArrayList<Character> useThisList = new ArrayList<Character>();
        useThisList.add('F');
        useThisList.add('G');
        useThisList.add('L');
        myLists[3][7].setList(useThisList);
    }

司寇照
2023-03-14

二维数组是一个数组的数组——它意味着结构看起来像:

[0,0][0,1][0,2][0,3] -> sub array 1
[1,0][1,1][1,2] -> sub array 2
[2,0][2,1][2,2][2,3][2,4] - sub array 3

请注意,每个子数组中的元素数不必相同。您可以将上述数组创建为(我使用的是整数,您的类型会根据需要而变化):

int[][] a = new int[3][]; // The number of sub arrays or the first argument should be defined. 
// The number of elements in each sub array need not be known at compile time though

因此,如果必须对ArrayList做同样的事情,数组中的数组将转换为列表中的列表。所以你可以做这样的事情:

ArrayList<ArrayList<Integer>> arrayList = new ArrayList<ArrayList<Integer>>();

由于ArrayList对象可以动态扩展,其结构类似于:

Row [0] -> [0][1][2]..... // and so on
Row [1] -> [0][1][2]..... // and so on
Row [2] -> [0][1][2]..... // and so on

使用嵌套for循环将元素输入到该循环中的方式非常类似。

赫连睿
2023-03-14
ArrayList<Character>[][] arrayOfCharacters = new ArrayList[9][9];
for(int i=0;i<arrayOfCharacters.length;i++){
      for(int i2=0;i2<arrayOfCharacters[i].length;i2++){
            arrayOfCharacters[i][i2]=new ArrayList<Character>(20);
      }
}
 类似资料:
  • 我有一个小程序,在2D数组中保存状态对和它们的首都。在此程序下面: 我需要用替换常规的二维数组。 我在stackoverflow上找到了一些线程,如何添加我想要的数组。以下是链接:如何在Java中创建二维ArrayList?以及如何声明2D字符串ArrayList?。但是这些讨论并没有解释如何在每个ArrayList中添加元素。我能做的最好的事情是创建新的ArrayList,然后添加一些元素,最后

  • 我正在创建一个Android应用程序,为了使其工作,我需要动态创建一个多维(2D): 我把代码留给您,以便让您理解它是如何被排序的,这样您就可以清除它来添加这个特性(可能我不仅想要代码本身的装饰,还想要对其中的内容有一个几乎详细的解释,我会非常感谢的! http://imgur.com/a/ajyoe

  • 问题内容: 我一直在网上阅读,有些地方说这是不可能的,有些地方说是不可能,然后举一个例子,其他人则反驳该例子,等等。 如何在JavaScript中声明二维数组?(假设有可能) 我将如何访问其成员?(或?) 问题答案:

  • 问题内容: 无论如何,我对ArrayLists还是很陌生,但是我在这个项目中需要它们,如果你们能帮助我,我将不胜感激! 基本上,我需要创建一个多维数组列表来保存字符串值。我知道如何使用标准数组来执行此操作,但是这样做并不好,因为我不知道数组的大小,我所知道的只是它会有多少个尺寸。 因此,如果你们知道如何制作“具有2 / +尺寸的可动态调整大小的数组”,请告诉我。 在此先感谢, 安迪 编辑/更新 也

  • 问题内容: 我从使用方法获得像素。像素存储在名为的数组中。在对数据数组进行一些操作之后,我需要再次创建一个,以便可以将其传递到一个模块,该模块将显示来自此数据数组的修改后的图像,但我对此感到困惑。 问题答案: 然后再次设置像素。 PS:如评论中所述,请使用@TacticalCoder的答案

  • 问题内容: 我看到了一个问题:从数组创建ArrayList 但是,当我使用以下代码尝试该解决方案时,它并不能在所有情况下都有效: 我在这里做错了什么?代码不应该编译就好吗? 问题答案: 问题在 是,被认为是一个单一的,因为基本数组从延伸实例。如果你有这样的工作,而不是因为现在你要发送的数组。 根据您的评论:如果您仍然想使用一个(或另一个原始类型的数组)作为主要数据,那么您需要使用wrapper类创