我需要帮助从另一个类获取数组长度。即,将数组的长度从一个类传递到另一个类。这是问题所在。
Testmatrix.java
public class TestMatrix{
int rows;
int cols;
double data[][] = new double[4][4];
public TestMatrix() {
super();
rows=1; cols=1;
for(int i=0; i<=rows;i++)
{
for(int j=0; j<=cols;j++)
{
data[i][j] = 0.0;
}
}
}
public void print(){
for (int i = 0; i <data.length ; i++) {
for (int j = 0; j <data[0].length ; j++) {
System.out.print(data[i][j]+" ");
}
System.out.println();
}
}
这是主要课程 的 Main.java
public class Main {
public static void main(String[] args){
TestMatrix m1 = new TestMatrix();
m1.print();
}
}
构造函数中的一切似乎都是正确的。但问题是打印功能。数据的大小应为2.但它的值是4,声明初始化。有人为我解决了这个问题。我需要打印2x2矩阵(全0)但我得到4x4矩阵(全0)
提前致谢**
答案 0 :(得分:4)
当你创建一个数组时,你设置了大小,例如new double[4][4]
然后那个已经是这个数组的大小,即使你没有在那里插入任何东西。我的观点是,无论你插入1个元素,2个元素或8个元素,这都无关紧要,插入数组不会改变它的大小(length
返回的属性)。想象一个包,你有一个特定尺寸的包,无论你把物品都放在那里,包的大小都会保持不变。
答案 1 :(得分:2)
您将数组声明为4x4矩阵。第4行应该是double data[][] = new double[2][2];
,以达到你想要的效果。
答案 2 :(得分:1)
如Chris所述,将矩阵声明为2 * 2
或改变
for (int i = 0; i < data.length ; i++) {
for (int j = 0; j < data.length ; j++) {
至
for (int i = 0; i <= rows ; i++) {
for (int j = 0; j <= cols ; j++) {
如果你想要任何尺寸的矩阵达到4 * 4,请使用第二种解决方案。
答案 3 :(得分:1)
初始化数组不会更改数组的大小。如果要根据新的行和列大小进行打印,请将print()
方法更改为:
public void print() {
for (int i = 0; i <= rows ; i++) {
for (int j = 0; j <= cols ; j++) {
System.out.print(data[i][j]);
}
System.out.println();
}
}
同样,构造函数名称应与类名相同。但TestMatrix
的构造函数是Matrix
。
注意:另一个重要的事情是,您不需要将double数组初始化为0.0。默认情况下,此数组初始化为0.0,因为这是该类的实例字段。根据{{3}}:
每个类变量,实例变量或数组组件都是 在创建时使用默认值初始化。
对于double类型,默认值为正零,即0.0d。
另外,将TestMatrix(int rows, int cols, double[] data)
构造函数更改为:
// declare with a large size
double data[][] = new double[80][80];
public TestMatrix(int rows, int cols, double[] data) {
super();
this.rows = rows;
this.cols = cols;
for (int i = 0, k = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
this.data[i][j] = data[k++];
}
}
}
更好的做法是创建字段private
并为这些字段编写getter和setter方法。
答案 4 :(得分:1)
你可能想要这样的东西;
public class Matrix {
public final double[][] values;
public final int rows;
public final int cols;
public Matrix(int rows, int cols) {
this.rows = rows;
this.cols = cols;
values = new double[rows][cols]; // Automatically 0.0.
}
public void print() {
for (int i = 0; i < rows; ++i) {
for (int j = 0; j < cols; ++j) {
System.out.printf(" %6f", values[i][j]);
}
System.out.println();
}
}
}
Matrix m = new Matrix(2, 2);
...
rows
和cols
是多余的,因为您已使用values.length
和values[0].length
。
答案 5 :(得分:0)
一些注意事项:
将数组声明为double data[][] = new double[4][4];
会生成一个数组为4&#34; box&#34;宽和4&#34;盒&#34;高。每个框将保存指定类型的数据,在您的情况下,您将设置为0.0的双精度数据
public class TestMatrix
{
int rows;
int cols;
double data[][] = new double[2][2];
public TestMatrix()
{
rows = 1;
cols = 1;
for (int i = 0; i <= rows; i++)
{
for (int j = 0; j <= cols; j++)
{
data[i][j] = 0.0;
}
}
}
public void print()
{
for (int i = 0; i < data.length; i++)
{
for (int j = 0; j < data[0].length; j++)
{
System.out.print(data[i][j] + " ");
}
System.out.println();
}
}
public static void main(String[] args)
{
TestMatrix m1 = new TestMatrix();
m1.print();
}
}
答案 6 :(得分:0)
除上述答案外
如果您想找到差异,请用下面的代码替换现有的行
data[i][j] = 1.0;
System.out.print(data[i][j]+" ");
希望你理解获得所有0的原因
答案 7 :(得分:0)
你的课应该是这样的:
public class Test {
int rows;
int cols;
double data[][] = new double[2][2];
public void print() {
for (int i = 0; i < data.length; i++) {
for (int j = 0; j < data.length; j++) {
System.out.print(" "+data[i][j]+" ");
}
System.out.println();
}
}
public static void main(String[] args) {
Test m1 = new Test();
m1.print();
}
}
这部分你可以删除。你不需要它。这不是初始化。
public void matrix() {
rows = 1;
cols = 1;
for (int i = 0; i <= rows; i++) {
for (int j = 0; j <= cols; j++) {
data[i][j] = 0.0;
}
}
}