我正在写一个矩阵,但不幸的是我坚持输出。 它没有显示矩阵,而是显示了类似的内容:
实际矩阵是 矩阵@ 512fb063
我需要将矩阵转换为字符串,以便输出如下所示:
expected the matrix:
3 8 72
4 6 60
253 2 1
我写的代码是:
import java.util.Random;
final public class Matrix {
private final int size1; // number of rows
private final int size2; // number of columns
private final int[][] data; // M-by-N array
// create size1-by-size2 matrix of 0's
public Matrix(int size1, int size2) {
this.size1 = size1;
this.size2 = size2;
data = new int[size1][size2];
}
// create matrix based on 2d array
public Matrix(int[][] data) {
size1 = data.length;
size2 = data[0].length;
this.data = new int[size1][size2];
for (int i = 0; i < size1; i++)
for (int j = 0; j < size2; j++)
this.data[i][j] = data[i][j];
}
// creates and returns a random size1-by-size1 matrix with values between 0 and 255
public String toString(int size1, int size2) {
Matrix A = new Matrix(size1, size2);
String str = " ";
final int white = 0;
final int black = 255;
for (int i = 0; i < size1; i++)
for (int j = 0; j < size2; j++)
{
A.data[i][j] = white + (int)(Math.random() * ((black ) ));
str = (A.data[i][j]+"\t"+A.data[i][j+1]);
if (i==size1 &&j==size2) str = (A.data[i][j]+"\n");
}
return str;
}
答案 0 :(得分:2)
您需要覆盖public String toString()
功能。你现在正在做的是创建一个名为String toString(int size1, int size2)
的新函数。
写作时不会调用您的新函数:
System.out.println(myMatrix);
你可以这样做:
System.out.println(myMatrix.toString(2, 2));
或覆盖默认的toString()
功能。
因此以下代码应该有效:
@Override
public String toString() {
Matrix A = new Matrix(size1, size2);
String str = " ";
final int white = 0;
final int black = 255;
for (int i = 0; i < size1; i++)
for (int j = 0; j < size2; j++)
{
A.data[i][j] = white + (int)(Math.random() * ((black ) ));
str = (A.data[i][j]+"\t"+A.data[i][j+1]);
if (i==size1 &&j==size2) str = (A.data[i][j]+"\n");
}
return str;
}
其中size1
和size2
是类中的变量。
答案 1 :(得分:0)
您可以这样做:
@Override
public String toString()
{
return toString(size1,size2);
}
编辑:如果您想反映当前Matrix的实际内容:
@Override
public String toString()
{
StringBuilder sbResult = new StringBuilder();
for(int i = 0; i < size1;i++)
{
for(int j = 0; j < size2;j++)
{
sbResult.append(A.data[i][j]);
sbResult.append("\t");
sbResult.append(A.data[i][j+1]);
if(i == size1 && j == size2)
{
sbResult.append("\n");
}
}
}
return sbResult.toString();
}
答案 2 :(得分:0)
actual matrix is Matrix@512fb063
的输出实际上是你的Matrix类实例所在的Java中的内存地址。那是因为你的程序不知道如何“打印”这个类 - 它并不神奇地知道你想要它的行/列表示。
你有很多选择:
您的toString(int size1, int size2)
非常完美。因此,当您想要打印矩阵时,System.out.println(someMatrix.toString(2,2))
可以使用someMatrix
是Matrix类的实例。
如果你想让它正常运行System.out.println(someMatrix)
那么你将需要覆盖你的Matrix类'toString()函数。您 - 几乎 - 在您的toString(int size1, int size2)
函数中执行了此操作,但它不起作用,因为它需要完全匹配参数,即:toString()
应该采用0参数。您需要编写一个toString()
方法,然后可以调用toString(int size1, int size2)
答案 3 :(得分:0)
不知何故,您获得了哈希码。也许你可以使用http://math.nist.gov/javanumerics/jama/doc/矩阵实现。 我认为这条线不起作用 str =(A.data [i] [j] +“\ t”+ A.data [i] [j + 1]); 你没有得到IndexOutOfBoundexception吗?无论如何A.data [i] [j + 1]在循环中总是空的。顺便说一下,Java中的变量总是小写的。