Tag: 多维数组

在Java中高效实现多维数组?

据我所知(从这样的答案),java没有原生的多维连续内存数组( 例如,与C#不同 )。 虽然锯齿状数组语法(数组数组)可能对大多数应用程序都有好处,但我仍然想知道如果你想要连续内存数组的原始效率(避免不必要的内存读取),最佳做法是什么 我当然可以使用映射到2D的一维数组,但我更喜欢更结构化的东西。

在运行时设置数组的等级

我想知道最简单的方法是实现一个在运行时指定排名的数组。 我正在处理的示例存储了格点的布尔值数组,我希望用户能够选择模型在运行时使用的空间维数。 我查看了Array.newInstance()方法: dimensionOfSpace = userInputValue; // this value comes from GUI or whatever int latticeLength = 5; // square lattice for simplicity int[] dimensions = new int[dimensionOfSpace]; for(int i = 0; i < l.length; i++) l[i] = length; Object lattice = Array.newInstance(boolean.class, dimensions); 但是以任何方式访问这些值似乎都需要非常慢的方法,例如递归使用Array.get,直到返回的值不再是数组,即使用isArray()。 我在这里错过了一个明显的解决方案 我希望能够以类似于foo [i] [j] [k]的方式访问这些值。

如何对二维ArrayList进行排序

我有一个包含双值的二维ArrayList: ArrayList<ArrayList> data = new ArrayList<ArrayList>(); 与经典数组类似,我想对这个矩阵的“cols”进行排序:我想在子ArrayLists中获取具有相同索引的项,然后对它们进行排序。 就像为每一列调用Collections.sort()一样……按行我的意思是外层和内层是列。 这样做的正确方法是什么? 我想过迭代矩阵来反转它,然后用Collections.sort()对每一行进行排序? 但也许它不是最好的解决方案,因为矩阵大约是400 * 7000。 我不能使用经典数组,因为矩阵的大小是未知的。 感谢帮助。

在Java中将三维数组的所有值设置为零的最佳方法是什么?

我有一个三维数组,我想重置为零。 似乎应该有一个简单的方法来执行此操作,不涉及三个for循环: for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { for (int k = 0; k < n; k++) { cube[i][j][k] = 0; } } }

将字符串的二维数组打印为String

我知道如何为一维字符串数组做toString方法,但是如何打印二维数组呢? 用1D我这样做: public String toString() { StringBuffer result = new StringBuffer(); res = this.magnitude; String separator = “”; if (res.length > 0) { result.append(res[0]); for (int i=1; i<res.length; i++) { result.append(separator); result.append(res[i]); } } return result.toString(); 如何打印2D数组。

如何将嵌套List转换为多维数组?

在Java中,我想将嵌套的List转换为该类型的多维数组,该List包含最深层次的统一类型。 例如, ArrayList<ArrayList<ArrayList<ArrayList>>>进入String[][][][] 。 我尝试了几件事,我只能获得像Object[][][][]这样的Object[][][][]数组。 对于“简单列表”,似乎Apache Commons Lang完成了这项工作,但我无法弄清楚嵌套案例。 更新: 为了获得Object类型的多维数组,我使用了递归函数,所以我无法使用toArray()设置密钥类型,请参阅摘录: // the argument of this function is a (nested) list public static Object convert(Object object) { Object[] result = null; List list = (List) object; if (list != null) { Object type = getElementType(list); if (type instanceof List) { int size = list.size(); result = […]

二维迷宫的递归算法?

(这不是重复)我们在所有4个侧面都有一个由X围绕的2D迷宫,也有内部块。 迷宫的所有这些字符都存储在2D数组中。 程序必须找到从’S’开始到目标’G’的路径。 为此,使用名为’solve(int row,int col)的布尔方法,并使用’S’的行和列索引进行初始化。 算法必须是递归的。 如果它能够找到’G’的路径并且其他方面是假的,那么它应该返回true。 这是我试图解决这个显示“部分正确结果”的问题的方法。 public boolean solve(int row, int col) { char right = this.theMaze[row][col + 1]; char left = this.theMaze[row][col – 1]; char up = this.theMaze[row – 1][col]; char down = this.theMaze[row + 1][col]; if (right == ‘G’ || left == ‘G’ || up == ‘G’ || down == […]

Java中的多维数组扩展了哪个类?

我需要知道Java中哪些类多维数组完全延伸? 当我们分配 Object[] ref=new int[]{1,2,3}; 编译器抱怨对象是不同类型的。 所以似乎一维数组扩展了Object ; 我已经知道了。 但是当我们分配时 Object[] ref2=new int[][]{{1,2,3},{4,5,6}}; 编译器不会抱怨。 所以似乎二维数组扩展了Object[] 。 但是当我打印它的超类名称时: System.out.println(ref2.getClass().getSuperclass().getName()); 我有java.lang.Object 。 所以有人能解释这里发生了什么吗?

在2Darrays中检查4个连续相同的对角元素(连接4游戏)

我正在努力在Java上实现connect 4 Game。 我差不多完成了模拟游戏的程序。 我使用2D字符数组char [][] board = new char[6][7]; 代表游戏的网格。 我已经实现了checkHorizontal方法来查找是否有4个连续的相同水平元素来检查win条件。 我还实现了checkVertical方法来查找是否有4个连续相同的垂直元素来检查win条件。 我在编写checkDiagonal方法的算法时有点困惑, checkDiagonal方法检查2Darrays中4个连续相同对角线元素的所有可能性。 以下是游戏中对角线胜利案例的2个例子 情况1: * * * * * * * * * * * * * * Y * * * * * * RY * * Y * * YRYRYRR RYRYRYR 案例2: * * * * * * * * […]

GameLogic,x连续游戏

我正在制作一个游戏,我需要制作一个方法来检查指定的单元是否是包含相同字符的水平连续单元序列的一部分。 细胞序列需要长度为l。 如果细胞是长度至少为1的水平序列的一部分,则为真,否则为假。 到目前为止,我已经知道它检测到在指定字符的行中是否至少有5个连续的单元格具有相同的字符。 有人可以帮忙吗?