- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在ArrayList中存储几个2d数组位置,并按如下所示进行设置:
ArrayList<Integer> playedValues = new ArrayList<Integer>();
playedValues.add(dataArray[0][1]);
playedValues.add(dataArray[0][2]); //example of adding 2d array positions
int size = playedValues.size(); //get size of ArrayList
int gridIndex = playedValues.get(size - 1); //trying to set gridIndex to dataArray[0][2]
cell.setCell(0, gridIndex); //this is where the error occurs
//trying to pass gridIndex to here
public void setCell(int value, int gridIndex) {
gridIndex = value;
}
gridIndex
作为参数传递给
setCell
时,出现了NullPointerException。
gridIndex is not being set properly
。如何使
playedValues
本身存储
dataArray[][]
而不是
dataArray[][]
所保存的信息?
最佳答案
您正在寻找的解决方案
在与您聊天后,我们确定您正在制作Sudoku游戏,并且您想要存储移动并能够撤消这些移动。
您将板存储为sudokuGrid
,它是一个2d int数组。您需要能够对某些单元格(行,列)进行更改。您还需要能够存储移动(行,列)和顺序。然后,您可以同时使用这两个功能,并允许用户撤消其移动。
让我们专注于首先更改单元格。
撤消动作
我们可以编写一个方法,该方法接受一行和一列,然后将(行,列)单元格的值改回0。(撤消移动)。
我们应该可以像这样调用此方法:
int testRow = 4, testColumn = 1;
undoMove(testRow, testColumn, sudokuGrid);
undoMove
方法将这样编写:
public void undoMove(int row, int column, int[][] board) {
board[row][column] = 0;
}
sudokuGrid
传递给
undoMove
非常重要。否则,
undoMove
将无法对游戏板进行永久更改。您可以阅读下面我提供的链接,以获取有关为什么可以更改
sudokuGrid
的更多信息。
Move
存储在其中。当然,Java尚未为我们定义
Move
。我们将必须创建自己的类来定义
Move
。
Move
类的样子:
class Move {
int row, column;
public Move(int row, int column) {
this.row = row;
this.column = column;
}
}
public void undoMove(int row, int column, int[][] board) {
board[row][column] = 0;
}
Move
将具有一行,一列。
Move
:
ArrayList<Move> moves = new ArrayList<Move>();
// You'll need to get the row and column
// before you make the Move object
Move currentMove = new Move(row, column);
Move moveToUndo = moves.get( moves.size() - 1 );
undoMove(moveToUndo.row, moveToUndo.column, sudokuGrid);
moves.remove( moves.size() - 1 );
class Move {
int row, column;
public Move(int row, int column) {
this.row = row;
this.column = column;
}
}
public void undoMove(int row, int column, int[][] board) {
board[row][column] = 0;
}
// Later on, in your game loop method
ArrayList<Move> moves = new ArrayList<Move>();
// Adding moves
// In your program, you'll get the row and column from what
// the user types in or clicks on.
int row = 1, column = 7;
moves.add( new Move(row, column) );
row = 6, column = 8;
moves.add( new Move(row, column) );
// Undo'ing moves
Move moveToUndo = moves.get( moves.size() - 1 );
undoMove(moveToUndo.row, moveToUndo.column, sudokuGrid);
moves.remove( moves.size() - 1 );
undoMove
方法以接受
Move
,而不是一行和一列,这看起来非常干净。您还可以编写方法
undoLastMove
,该方法可以自动完成某些过程。
playedValues
用于什么,因此我不得不做出一些有根据的猜测,即您想让ArrayList保存数组,而不是单个值。
ArrayList<Integer> playedValues = ArrayList<Integer>();
playedValues
以保存
Integer
或
int
值。要改为设置
playedValues
来保存
int
的数组,请执行以下操作:
ArrayList<Integer[]> playedValues = ArrayList<Integer[]>();
playedValues
将存储
Integer
或
int
的数组。
ArrayList<Integer[]> playedValues = ArrayList<Integer[]>();
int[] arrayOne = {1, 2, 3, 4, 5};
// Adding arrays to the list
playedValues.add(arrayOne);
// Iterating through all arrays in playedValues
for(int i = 0; i < playedValues.size(); i++) {
int[] currentArray = playedValues.get(i);
// Then, of course, you can loop over each array like normal:
for(int j = 0; j < currentArray.length; j++) {
System.out.println(
"Array #" + i + " - Element #" + j + " = " + currentArray[i][j]
);
}
}
ArrayList<ArrayList<Integer>> playedValues = ArrayList<ArrayList<Integer>>();
int
。与使用
int[][]
相似,后者使用的数组包含保存
int
s'的数组。
ArrayList<ArrayList<Integer>> playedValues = ArrayList<ArrayList<Integer>>();
int[] arrayOne = {1, 2, 3, 4, 5};
// Adding values to the playedValues
playedValues.add( Arrays.asList(arrayOne) );
// Iterating through all values in playedValues
for(int i = 0; i < playedValues.size(); i++) {
for(int j = 0; j < playedValues.get(i).size(); j++) {
System.out.println(
"Row #" + i + " - Column #" + j + " = " + playedValues.get(i).get(j)
);
}
}
ArrayList<ArrayList<Integer>> playedValues = ArrayList<ArrayList<Integer>>();
int[] sampleRow = {0, 0, 0, 0, 0, 0, 0, 0, 0};
for(int i = 0; i < 9; i++) {
playedValues.add( Arrays.asList(sampleRow) );
}
2d array
。
// 100 for rows and columns was chosen arbitrarily.
int[][] playedValues = new int[100][100];
int[] arrayOne = {1, 2, 3, 4, 5};
int[] arrayTwo = {1337, 9001, 1111111, 22222, 33333, 444, -1, -123, 246};
// Adding arrays to the list
playedValues[0] = arrayOne;
playedValues[1] = arrayTwo;
// Iterating through all arrays in playedValues
for(int i = 0; i < playedValues.length; i++) {
for(int j = 0; j < playedValues[i].length; j++) {
System.out.println(
"Array #" + i + " - Element #" + j + " = " + currentArray[i][j]
);
}
}
setCell
方法:
public void setCell(int value, int row, int column, int[][] grid) {
grid[row][column] = value;
}
setCell
方法
int
的数组,则可以使用此实现更改某个单元格:
// Making a call to set the cell in the 1st row at the 4th column, to 0
setCell(0, 1, 4, playedValues);
public void setCell(int value, int row, int column, ArrayList<Integer[]> grid) {
int[] rowArray = grid.get(row);
rowArray[column] = value;
}
gridIndex
,而在于
cell
。
NullPointerException
获得
int
,因为Java中所有
int
的默认/空值均为0。有关证明,请参见文档
here,
here,
here和
this post's answers。
setCell
方法上,而是在您的
cell
变量上。因为
cell
是
null
,而不是传递给
setCell
的任何内容,所以引发NullPointerException。
setCell
确实不会做任何明显的事情。这是因为Java是按值传递,而不是按引用传递。您可以阅读
this post以获得详细说明。
setCell
和
value
的形式传递给
gridIndex
和
setCell
的实际数字值是多少,而没有引用。
int gridIndex = 10, myValue = 2;
setCell(myValue, gridIndex);
setCell
并传递
gridIndex
和
myValue
的值(分别为10和2)。
setCell
方法从不看到实际的变量
gridIndex
和
myValue
,
setCell
没有引用这些变量变量,则只会看到值10和2。
setCell
中的变量中,这些变量指定为参数名称(int值,int gridIndex),但这些变量不是传递给
setCell
的变量。参见以下代码:
public static void main(String[] args) {
int gridIndex = 10, myValue = 9999;
setCell(myValue, gridIndex);
System.out.println(gridIndex);
}
public static void setCell(int value, int gridIndex) {
// In here, value is NOT the same variable, myValue, that
// we passed in. Just the same, gridIndex, is not the same
// variable that we passed in from main.
// In here, value and gridIndex have the SAME VALUES
// as the variables we pass in, but they are not the same
// variables. They are newly made variables, with the same values.
}
public static void main(String[] args) {
setCell(10, 9999);
System.out.println(gridIndex);
}
public static void setCell(int value, int gridIndex) {
gridIndex = value;
}
setCell
,但是在
setCell
内部,我们将变量
gridIndex
更改为等于
value
。这会告诉Java,数字9999的新值实际上应该是10吗?当然不是。我们没有更改传入的内容,而是更改了保存传入值的变量。
int
变量时,都可以将变量名替换为其持有的值,并且代码将保持完全相同。
int gridIndex = 10, myValue = 9999;
setCell(myValue, gridIndex);
setCell(10, 9999);
int
中的数字,但是没有任何
int
变量传递给
setCell
,只有数字值(如10或9999)。
关于java - 将二维数组位置存储在ArrayList中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36661169/
我正在尝试创建一个包含 int[][] 项的数组 即 int version0Indexes[][4] = { {1,2,3,4}, {5,6,7,8} }; int version1Indexes[
我有一个整数数组: private int array[]; 如果我还有一个名为 add 的方法,那么以下有什么区别: public void add(int value) { array[va
当您尝试在 JavaScript 中将一个数组添加到另一个数组时,它会将其转换为一个字符串。通常,当以另一种语言执行此操作时,列表会合并。 JavaScript [1, 2] + [3, 4] = "
根据我正在阅读的教程,如果您想创建一个包含 5 列和 3 行的表格来表示这样的数据... 45 4 34 99 56 3 23 99 43 2 1 1 0 43 67 ...它说你可以使用下
我通常使用 python 编写脚本/程序,但最近开始使用 JavaScript 进行编程,并且在使用数组时遇到了一些问题。 在 python 中,当我创建一个数组并使用 for x in y 时,我得
我有一个这样的数组: temp = [ 'data1', ['data1_a','data1_b'], ['data2_a','data2_b','data2_c'] ]; // 我想使用 toStr
rent_property (table name) id fullName propertyName 1 A House Name1 2 B
这个问题在这里已经有了答案: 关闭13年前。 Possible Duplicate: In C arrays why is this true? a[5] == 5[a] array[index] 和
使用 Excel 2013。经过多年的寻找和适应,我的第一篇文章。 我正在尝试将当前 App 用户(即“John Smith”)与他的电子邮件地址“jsmith@work.com”进行匹配。 使用两个
当仅在一个边距上操作时,apply 似乎不会重新组装 3D 数组。考虑: arr 1),但对我来说仍然很奇怪,如果一个函数返回一个具有尺寸的对象,那么它们基本上会被忽略。 最佳答案 这是一个不太理
我有一个包含 GPS 坐标的 MySQL 数据库。这是我检索坐标的部分 PHP 代码; $sql = "SELECT lat, lon FROM gps_data"; $stmt=$db->query
我需要找到一种方法来执行这个操作,我有一个形状数组 [批量大小, 150, 1] 代表 batch_size 整数序列,每个序列有 150 个元素长,但在每个序列中都有很多添加的零,以使所有序列具有相
我必须通过 url 中的 json 获取文本。 层次结构如下: 对象>数组>对象>数组>对象。 我想用这段代码获取文本。但是我收到错误 :org.json.JSONException: No valu
enter code here- (void)viewDidLoad { NSMutableArray *imageViewArray= [[NSMutableArray alloc] init];
知道如何对二维字符串数组执行修剪操作,例如使用 Java 流 API 进行 3x3 并将其收集回相同维度的 3x3 数组? 重点是避免使用显式的 for 循环。 当前的解决方案只是简单地执行一个 fo
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我有来自 ASP.NET Web 服务的以下 XML 输出: 1710 1711 1712 1713
如果我有一个对象todo作为您状态的一部分,并且该对象包含数组列表,则列表内部有对象,在这些对象内部还有另一个数组listItems。如何更新数组 listItems 中 id 为“poi098”的对
我想将最大长度为 8 的 bool 数组打包成一个字节,通过网络发送它,然后将其解压回 bool 数组。已经在这里尝试了一些解决方案,但没有用。我正在使用单声道。 我制作了 BitArray,然后尝试
我们的数据库中有这个字段指示一周中的每一天的真/假标志,如下所示:'1111110' 我需要将此值转换为 boolean 数组。 为此,我编写了以下代码: char[] freqs = weekday
我是一名优秀的程序员,十分优秀!