[英]How to Delete a specific Row and Col in a 2D array in Java?
我想從參考網上刪除一個人,我首先創建原始2D陣列的副本,然后通過checkVertex ArrayList重新制作尺寸較小的2D網絡陣列,checkVertex是我的唯一頂點的列表。 因此,問題在於,當重新填充我的size-1的新array [] []時是錯誤的,而且我不確定如何解決它。
public static void deletePerson(String name)
{
//checkVertex is a list of the unique vertices
int rowNum = 0;
int colNum = 0;
int origRows = checkVertex.size() + 1; //+1 is for the [0][0] null spot
int origCols = checkVertex.size() + 1;
String person = name;
String[][] copy = matrix.clone();
for(int x=0; x<checkVertex.size() + 1; x++)
{
if( matrix[x][0] == null )
{
//do nothing
}
else if( matrix[x][0].equalsIgnoreCase(person) )
{
rowNum = x;
break;
}
}
for(int z=0; z<checkVertex.size() + 1; z++)
{
if( matrix[0][z] == null )
{
//do nothing
}
else if( matrix[0][z].equalsIgnoreCase(person) )
{
colNum = z;
break;
}
}
//Now remove them from the list of vertexes
for(int i=0; i<checkVertex.size(); i++)
{
if(checkVertex.get(i).equalsIgnoreCase(person))
{
checkVertex.remove(i);
break;
}
}
setNum(checkVertex.size());
//Build the sides of the matrix
//Starting with the first col
matrix = new String[checksSize + 1][checksSize + 1];
for(int x = 0 ; x < checksSize ; x++)
{
String vertice = checkVertex.get(x);
if( x == rowNum )
{
continue;
}
else
{
matrix[x+1][0] = vertice;
}
}
//Now get the top row
for(int x = 0 ; x < checksSize ; x++)
{
String vertice = checkVertex.get(x);
if( x == colNum )
{
continue;
}
else
{
matrix[0][x+1] = vertice;
}
}
//Now fill in the references
for(int i=1; i<checkVertex.size() + 2; i++)
{
if( i == rowNum )
{
continue;
}
else
{
for(int j=1; j<checkVertex.size() + 2; j++)
{
if( j == colNum )
{
//continue;
matrix[i][j-1] = copy[i][j];
j++;
}
else
{
matrix[i][j] = copy[i][j];
}
}//end for j
}
}//end for i
}//END deletePerson(String name)
您不能更改現有Array數據結構的維,除非使用新維破壞並重建它(必須重新初始化並重新填充)。
編輯:
for(int i=1; i<checkVertex.size() + 2; i++)
為什么+2
? 新矩陣比原始矩陣大嗎? 不可以
查看該程序的末尾以了解如何完成。希望它會有所幫助。
public static void main(String[] args) {
int rows=5;
int cols=5;
double[][] matrix = new double[rows][cols];
int counter =0;
for(int i=0; i<rows; i++)
for(int j=0; j<cols; j++){
matrix[i][j] = Math.random();
// counter++;
// System.out.println("First test ("+counter+") : " + matrix[i][j]);
}
//keep copy of original matrix
double[][] matrixCopy = matrix.clone();
//Assume
int rowToRemove = 2;
int colToRemove = 3;
// re-initialise matrix with dimension i-1 , j-1
matrix = new double[rows-1][cols-1];
counter = 0;
//row and column counter for the new matrix
int tmpX=-1;
int tmpY=-1;
//re-populate new matrix by searching through the original copy of matrix, while skipping useless row and column
// works only for 1 row and 1 column in a 2d array but by changing the conditional statement we can make it work for n number of rows or columns in a 2d array.
for(int i=0; i<rows; i++)
{
tmpX++;
if(i==rowToRemove){
tmpX--;
}
tmpY=-1;
for(int j=0; j<cols; j++){
tmpY++;
if(j==colToRemove){
tmpY--;
}
if(i!=colToRemove&&j!=colToRemove){
counter++;
matrix[tmpX][tmpY] = matrixCopy[i][j];
System.out.println(counter+" :"+matrix[tmpX][tmpY]);
}
}
}
int n = matrixcopy.length;
int m = matrixcopy[0].length
int[][] matrix = new int[n-1][m-1];
for(int i=0 ; i<n-1 ; i++){
for(int j=0 ; j<m-1 ; j++){
matrix[i][j] = matrixcopy[i+(i>=rowToDelete?1:0)][j+(j>=colToDelete?1:0)];
}
}`
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.