0

2 つのコンストラクターを持つマトリックス クラスと、マトリックス内の周囲の数値をフィルター平均するメソッドを作成する必要があります。

これが私が思いついたものですが、コンパイルしようとすると、「配列が必要です、マトリックスが見つかりました」というエラーが発生します。

助けてください !

/**
* This class represents a two dimensional Matrix 
* 
*/
public class Matrix
{
private int[][] _matrix;

/**
 * Constructs a Matrix from a two-dimensional array; the dimensions as well as the values of this Matrix will be the same as the dimensions and values of the two-dimensional array.
 */
public Matrix(int[][] array)
{
    for (int i=0; i < array.length;i++)
        for (int j=0; j < array[i].length;j++)
            _matrix[i][j] = array[i][j];
}

/**
 * Constructs a size1 by size2 Matrix of zeroes.
 */
public Matrix(int size1, int size2)
{
    for (int i=0; i < size1;i++)
        for (int j=0; j < size2;j++)
            _matrix[i][j]=0;
}

/**
 * Calculates and returns a copy of this Matrix after it has been filtered from noise. All pixels are represented by a number 0-255 inclusive. 
 * 
 * @return a copy of this Matrix after it has been filtered from noise
 */
public Matrix imageFilterAverage()
{
    Matrix newMatrix = new Matrix(_matrix);


    for (int i=0; i < _matrix.length;i++)
        for (int j=0; i < _matrix[i].length;j++)
            newMatrix[i][j] =  _matrix[i-1][j-1] + _matrix[i-1][j] + _matrix[i-1][j+1] + _matrix[i][j-1] + _matrix[i][j] + _matrix[i][j+1] + _matrix[i+1][j-1] + _matrix[i+1][j] + _matrix[i+1][j+1];
}


}

編集

皆さん、助けてくれてありがとう。今、toString メソッドを作成しようとしています。これは、数字の間にタブを付けてマトリックスを出力しますが、最後の行の最後の数字の後にはタブがありません。実際に機能させることはできません。戻す方法がわかりません。しかし、これが私がこれまでに思いついたものです:

 public String toString()
 { 
 for (int i=0; i < _matrix.length; i++) { 
    for (int j=0; j < _matrix[i].length; j++) 
       if (j == (_matrix[i].length - 1)) 
              System.out.print(_matrix[i][j]); 
       else System.out.print(_matrix[i][j] + "\t"); 
     System.out.println(); 
 } 


}
4

2 に答える 2

2
newMatrix[i][j] =  _matrix[i-1][j-1] + _matrix[i-1][j] + _matrix[i-1][j+1] + _matrix[i][j-1] + _matrix[i][j] + _matrix[i][j+1] + _matrix[i+1][j-1] + _matrix[i+1][j] + _matrix[i+1][j+1];

で使用できないため、この行はエラーを引き起こし[]ますMatrix。その演算子は配列でのみ使用できます。

_matrixまた、何も設定していないため、これによりエラーが発生します。

for (int i=0; i < array.length;i++)
    for (int j=0; j < array[i].length;j++)
        _matrix[i][j] = array[i][j];

_matrix = new int[array.length][array[0].length]それらの行の前に追加します。

于 2013-05-05T04:49:58.567 に答える
0

imageFilterAverage() を変更する

public Matrix imageFilterAverage() {
    Matrix newMatrix = new Matrix(_matrix);
    for (int i=0; i < _matrix.length;i++)
        for (int j=0; i < _matrix[i].length;j++)
            newMatrix._matrix[i][j] =  _matrix[i-1][j-1] + _matrix[i-1][j] + _matrix[i-1][j+1] + _matrix[i][j-1] + _matrix[i][j] + _matrix[i][j+1] + _matrix[i+1][j-1] + _matrix[i+1][j] + _matrix[i+1][j+1];
    return newMatrix;
}

コンパイル エラーは発生しますが、おそらくコードにはもっと多くのバグがあります。たとえば、2 番目のコンストラクタは次のようにする必要があります。

/**
 * Constructs a size1 by size2 Matrix of zeroes.
 */
public Matrix(int size1, int size2) {
    _matrix = new int[size1][size2];
}

最初のコンストラクターも間違っています。最初に _matrix を作成してからデータをコピーする必要があるからです。

于 2013-05-05T04:51:58.997 に答える