从一个类获取数组长度到另一个类

时间:2016-09-16 12:58:55

标签: java arrays matrix

我需要帮助从另一个类获取数组长度。即,将数组的长度从一个类传递到另一个类。这是问题所在。

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)

提前致谢**

8 个答案:

答案 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);
...

rowscols是多余的,因为您已使用values.lengthvalues[0].length

答案 5 :(得分:0)

一些注意事项:

  • 使用IDE,您的代码甚至没有编译,这是最小的 你应该努力解决任何问题。
  • 将数组声明为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)

除上述答案外

我得到4x4矩阵(全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;
        }
    }
}