Как рассчитать два разреженных matirx в java? - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть практика по java oop программированию, и у меня есть некоторые проблемы. Она состоит из разреженной матрицы, и в этой практике у нас есть несколько интерфейсов, таких как ниже

package mainpack;

public interface iSparseMat {
    public int[][] mat = new int[10][3];
    public int NonZeroElements = 6;
    public final int RowSize=4, ColSize=4;
    public void initialize();
    public void Add(int[][] a);
    public void ReverseOnSubDiameter();
    public void ReverseOnMainDiameter();
    public void SortRows();//optional
    public void Print();
}

, и у меня есть a Testspace. java класс, как показано ниже

package mainpack;

public class TestSparse implements iSparseMat, Comparable<int[][]>{
    public TestSparse()
    {
        System.out.println("Test Sparse class constructor invoked.");
    }
    public void initialize()
    {
        for (int i = 0; i < 5 ; i++) {
            for (int j = 0; j < 3; j++) {
                if( j == 2){
                    this.mat[i][j] = (int) (Math.random() * ((10 - 1) + 1)) + 1;
                }else{
                    this.mat[i][j] = (int) (Math.random() * ((3 - 0) + 1));
                }

            }
        }

        // assign five nonzero values to some indices of the matrix
        // row and column number of these indices should be generated by random method
    }
    public void SortRows() {}//optional
    public void Add(int[][] a){

        int j = 0;
        for (int i = 0;i <5; i++) {

            while( j < 5  ) {
                if (this.mat[i][0] == a[j][0] && this.mat[i][1] == a[j][1]){
                    this.mat[i][2] = this.mat[i][2] + a[j][2];
                }else{
                    this.mat[i+5][0] =  a[j][0];
                    this.mat[i+5][1] =  a[j][1];
                    this.mat[i+5][2] =  a[j][2];
                }
                j++;
            }


        }



    } // adds the input matrix to the exisiting one (mat = mat + a)
    public void ReverseOnSubDiameter(){} // substitutes the elements of the matrix over the main diameter  
    public void ReverseOnMainDiameter(){} // substitutes the elements of the matrix over the sub-diameter
    public void Print() {

         int[][] normalmat = new int[ColSize][RowSize];

            for (int i = 0; i < ColSize; i++) {
                for (int j = 0; j <RowSize ; j++) {
                    normalmat[i][j] = 0;
                }
            }



        for (int i = 0; i <5 ; i++) {
                normalmat[this.mat[i][1]][this.mat[i][0]]= mat[i][2];
        }


/*
        for (int i = 0; i <ColSize ; i++) {

            for (int j = 0; j < RowSize; j++) {

                System.out.print(normalmat[i][j] + " ");

            }
            System.out.println();
        }
        */


        for (int i = 0; i <5 ; i++) {

            for (int j = 0; j <3; j++) {

                System.out.print(this.mat[i][j] + " ");

            }
            System.out.println();
        }

    } //prints the matrix as a normal matrix (not sparse)
    public int compareTo(int[][] A)
    {
        // return number of nun-zero elements of mat - number of nun-zero elements of A  
            return 0;
    }
    public static void main(String[] args) {
        TestSparse TS1 = new TestSparse(),TS2 = new TestSparse();
        TS1.initialize();
        System.out.println("TS1 is: \n");
        TS1.Print();
        TS2.initialize();
        System.out.println("TS2 is: \n");
        TS2.Print();
        System.out.println("،Ts1 & TS2 Collect: \n");
        TS1.Add(TS2.mat);
        TS1.Print();
    System.out.println("Difference in non-zero elements of  matrices are " + TS1.compareTo(TS2.mat));


        //TS1.SortRows();
        //TS1.Print();

/*      TS1.ReverseOnSubDiameter();
        TS1.Print();
        TS1.ReverseOnMainDiameter();
        TS1.Print();*/
    }
}

Я хочу вычислить TS1.mat с помощью TS2.mat в методе Add. но когда я использую этот код, он не может найти TS1.mat, а просто вычисляет TS2.mat с помощью TS2.mat и отправляет результат

Test Sparse class constructor invoked.
Test Sparse class constructor invoked.
TS1 is: 

1 2 3 
2 2 10 
2 0 9 
1 2 8 
3 2 2 
TS2 is: 

0 1 1 
2 2 4 
1 1 10 
0 0 8 
2 0 7 
،Ts1 & TS2 Collect: 

0 1 2 
2 2 4 
1 1 10 
0 0 8 
2 0 7 
Difference in non-zero elements of  matrices are 0

. Вы видите, что он выполняет этот результат. TS2.mat + TS2.mat но я не хочу этого Мне нужен TS1.mat + TS1.mat, но я не знаю, что мне делать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...