簡體   English   中英

如何在Java中刪除2D數組中的特定行和列?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM