【问题标题】:Get Array length from one class to another class获取从一个类到另一类的数组长度
【发布时间】:2017-01-24 17:19:02
【问题描述】:

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

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)

提前致谢 **

【问题讨论】:

  • 有什么理由标记这个c++
  • 我认为这个问题可以很快传达给人们
  • 标签垃圾邮件是不受欢迎的,因为它可能会吸引错误的人口统计来查看您的带有不相关标签的问题
  • 数组的内容不决定长度。
  • 是的,对不起 EdChum

标签: java arrays matrix


【解决方案1】:

您将数组声明为 4x4 矩阵。第 4 行应该是 double data[][] = new double[2][2]; 以实现您想要的。

【讨论】:

  • 先生,但如果我想要 3x3 矩阵怎么办。这可能只是一个临时解决方案。无论如何,谢谢兄弟。想出另一个答案。
  • 请看下面我的回答
  • 杰克兄弟!!你的答案在哪里
  • @Chandra:无论如何,您都需要重新声明您的数组大小,如果您这样做并希望它是动态的。或者使用 ArrayList 的 ArrayList 来动态调整大小,但这可能会减慢速度。
  • 在最后一个下面找到它。
【解决方案2】:

当你创建一个数组时,你设置了大小,例如new double[4][4] 那么这已经是这个数组的大小了,即使你没有在里面插入任何东西。我的观点是,无论您插入 1 个元素、2 个元素还是 8 个元素,都没有关系,插入数组不会改变它的大小(length 返回的属性)。想象一个袋子,你有一个特定尺寸的袋子,不管你把东西放在那里,袋子的尺寸都会保持不变。

【讨论】:

  • 是的!明白了
【解决方案3】:

如 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,请使用第二种解决方案。

【讨论】:

  • 完美的杰克!!那行得通!感谢您的快速回复。大拇指
  • @ChandraKishore 我更喜欢你应该在了解行和列时初始化 Matrix
【解决方案4】:

初始化数组不会改变数组的大小。如果您想根据新的行和列大小进行打印,请将您的 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

注意:还有一点很重要,你不需要将双精度数组初始化为 0.0。该数组默认初始化为 0.0,因为这是该类的实例字段。根据Oracle

每个类变量、实例变量或数组组件都是 创建时使用默认值初始化。

对于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 方法。

【讨论】:

  • 如果我必须从另一个类传递数组的值怎么办。这是相同的场景。为了从另一个类打印数组的值,我应该在打印函数中进行哪些更改
  • 不明白。你是说在Main 类中从Testmatrix 类打印data[][]
  • 是的,类似的,主要是如果我有一个包含元素的数组。然后是 m1.print();那么我应该输出一个具有非零值的矩阵
  • 那么我应该在打印函数中进行哪些更改才能获取数组的值。现在,目前我无法打印值。只有当我执行这样的功能时我才得到零 -
  • double a[] = {1.2, 2.3, 3.4, 4, 6.2, 8.2, 1.3, 4.2}; TestMatrix m3 = new testMatrix(4, 2, a);
【解决方案5】:

你可能想要这样的东西;

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

【讨论】:

  • 先生,如果我必须从另一个类传递数组的值怎么办。这是相同的场景。为了从另一个类中获取数组的值,我应该在打印函数中进行哪些更改
【解决方案6】:

一些注意事项:

  • 使用 IDE,您的代码甚至没有编译,这是最低要求 你应该为任何问题付出努力。
  • 将数组声明为 double data[][] = new double[4][4]; 会生成一个 4 个“盒子”宽和 4 个“盒子”高的数组。每个框都将保存指定类型的数据,在您的情况下,您将其设置为 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();
      }
    }
    

【讨论】:

    【解决方案7】:

    除了以上答案

    我得到 4x4 矩阵(全为 0)

    如果你想发现差异,用下面的代码替换现有的行

    data[i][j] = 1.0; 
    System.out.print(data[i][j]+" ");        
    

    希望你明白得到所有 0 的原因

    【讨论】:

      【解决方案8】:

      你的班级应该是这样的:

      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;
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-21
        • 1970-01-01
        • 1970-01-01
        • 2020-08-05
        • 2013-10-04
        • 1970-01-01
        相关资源
        最近更新 更多