Java OOP改变2d矩阵的位置?
如果我有一个矩阵,比如3x4,值为 1234Java OOP改变2d矩阵的位置?,java,oop,matrix,2d,Java,Oop,Matrix,2d,如果我有一个矩阵,比如3x4,值为 1234 56778 9123 假设用户想要旋转一列: 输入第2列。结果如下: 1634 517 8 922 3 然后我想保存这个矩阵,这样我就可以用另一种方法旋转它的行: 输入第2行;那么结果将是: 1634 1785 9223 公共类矩阵 { int行; int列; int[][]数组=新的int[行][列]; 公共矩阵(整数行,整数列) { this.row=行; this.column=列; this.arrays=newint[行][列]; } pu
56778
9123 假设用户想要旋转一列:
输入第2列。结果如下: 1
6
345
1
7 89
2
2 3
然后我想保存这个矩阵,这样我就可以用另一种方法旋转它的行:输入第2行;那么结果将是: 1634
1785
9223
公共类矩阵
{
int行;
int列;
int[][]数组=新的int[行][列];
公共矩阵(整数行,整数列)
{
this.row=行;
this.column=列;
this.arrays=newint[行][列];
}
public int getRow()
{
返回行;
}
公共无效集合行(整数行)
{
this.row=行;
}
public int getColumn()
{
返回列;
}
公共void setColumn(int列)
{
this.Column=Column;
}
公共int getArrays()
{
返回数组[行][列];
}
公共void setArray(int行,int列)
{
this.row=行;
this.column=列;
}
公开展览(
{
整数计数=0;
for(int i=0;i
我对Java OOP非常陌生,如果有人能帮助我澄清并指导我的下一步,这将非常有帮助。提前感谢。首先,我建议对提供的代码进行一些更改:
数组
,这很好,但您没有使用它/填充它(这就是@tumisma在其注释中的意思)。在下面的代码中使用了它count++
这是count+=1的较短方式代码>/count=count+1代码>
count=1;
),而不是count=0;计数+=1代码>
System.out.println()中放入任何内容代码>用于空行/输入
public class Matrix
{
private int amountOfRows;
private int amountOfColumns;
private int[][] matrixArray;
public Matrix(int amountOfRows, int amountOfColumns)
{
this.amountOfRows = amountOfRows;
this.amountOfColumns = amountOfColumns;
matrixArray = new int[amountOfRows][amountOfColumns];
fillMatrixArray();
}
private void fillMatrixArray()
{
int count = 0;
for(int r = 0; r < amountOfRows; r++)
{
for(int c = 0; c < amountOfColumns; c++)
{
if(count < 9)
{
count++;
matrixArray[r][c] = count;
}
else
{
// If we reached 9, we reset back to 1
count = 1;
matrixArray[r][c] = count;
}
}
}
}
public int[][] getMatrixArray()
{
return matrixArray;
}
public int getAmountOfRows()
{
return this.amountOfRows;
}
public int getAmountOfColumns()
{
return this.amountOfColumns;
}
public void show()
{
for(int r = 0; r < amountOfRows; r++)
{
for(int c = 0; c < amountOfColumns; c++)
{
System.out.print(matrixArray[r][c]);
}
System.out.println();
}
System.out.println();
}
// TODO: rotateColumn(int columnNr)
// TODO: rotateRow(int rowNr)
}
输出:
1234
5678
9123
1634
5178
9223
我将把
rotateRow
-方法的实现留给您。我确信有一种比将列放入单独的数组、旋转并放回更有效/直接的方法,但我找不到它,所以我使用了这种方法来代替。首先,我建议对提供的代码进行一些更改:
数组
,这很好,但您没有使用它/填充它(这就是@tumisma在其注释中的意思)。在下面的代码中使用了它count++
这是count+=1的较短方式代码>/count=count+1代码>
count=1;
),而不是count=0;计数+=1代码>
System.out.println()中放入任何内容代码>用于空行/输入
public class Matrix
{
private int amountOfRows;
private int amountOfColumns;
private int[][] matrixArray;
public Matrix(int amountOfRows, int amountOfColumns)
{
this.amountOfRows = amountOfRows;
this.amountOfColumns = amountOfColumns;
matrixArray = new int[amountOfRows][amountOfColumns];
fillMatrixArray();
}
private void fillMatrixArray()
{
int count = 0;
for(int r = 0; r < amountOfRows; r++)
{
for(int c = 0; c < amountOfColumns; c++)
{
if(count < 9)
{
count++;
matrixArray[r][c] = count;
}
else
{
// If we reached 9, we reset back to 1
count = 1;
matrixArray[r][c] = count;
}
}
}
}
public int[][] getMatrixArray()
{
return matrixArray;
}
public int getAmountOfRows()
{
return this.amountOfRows;
}
public int getAmountOfColumns()
{
return this.amountOfColumns;
}
public void show()
{
for(int r = 0; r < amountOfRows; r++)
{
for(int c = 0; c < amountOfColumns; c++)
{
System.out.print(matrixArray[r][c]);
}
System.out.println();
}
System.out.println();
}
// TODO: rotateColumn(int columnNr)
// TODO: rotateRow(int rowNr)
}
输出:
1234
5678
9123
1634
5178
9223
我将把
rotateRow
-方法的实现留给您。我确信有一种比将列放入单独的数组、旋转并放回更有效/直接的方法,但我找不到它,所以我使用了这种方法。你知道你的矩阵不是[[1,2,3,4],[5,6,7,8],[9,1,2,3]],而是这个[[0,0,0,0,0,0]]?您知道您的矩阵不是[[1,2,3,4]、[5,6,7,8]、[9,1,2,3]],而是这个[[0,0,0,0]、[0,0,0,0]、[0,0,0]]?非常感谢您的帮助和帮助edit@Kevin,你能为我提供一些建议,以便我能为这类问题找到自己的解决方案吗?您是否使用了试错法,或者您是如何分解问题以找到您编写的解决方案的。再次谢谢你。如果我宠坏了太多,我很抱歉。我的第一种方法是尝试在现有的2D数组内部旋转列。这并不是真的很好,因为我要么完全错了(比如整个专栏变成了2
,要么除了最后一个数字,其他都是正确的)。在这种方法中,我还尝试了一个反向for循环(for(int r=amountOfRows-1;r>=0;r--)
),但也不起作用。然后我提出了列的隔离,旋转它,然后重新插入它,这很容易,虽然没有我想要的那么有效(考虑到3个for循环)。要补充我的评论,是的,我一开始有点反复尝试,但因为花了一点时间,我寻找了一种不太理想但更容易实现的方法,这就是我在回答中所说的。它只在rotateColumn
-方法中对循环执行3次,因此我对解决方案并不满意,也许其他人有一种性能更好的方法来解决您的问题。但它是有效的,而且有点瘦
1234
5678
9123
1634
5178
9223