【问题标题】:Moving an array to a different class将数组移动到不同的类
【发布时间】:2020-10-25 12:54:49
【问题描述】:

所以我试图将数组的值获取到不同的类并在那里做一些事情。但我不断收到所有这些错误。我已经尝试了很多东西,但它不起作用。基本上我希望一个数组的每个位置都分配一个值并将这些数字拉到不同的类,然后可能会比较它们。它是我的简化代码。我会感谢任何可以更改代码的人,这样我就不会收到错误消息,如果你能将它尽可能地接近这个,我将不胜感激,因为我的代码很长,我想把它放到不同的类中以最小化主班。提前致谢。

package Vasu;
public class First {

    public int n = 5;
    public int m = 0;
    long[] arr = new long[n];

    public static void main(String[] args) {

        Second C = new Second();  // cannot make a static reference in a non static field 
        arr[n - m] = m;           // "
        C.rules(arr[n - m]);      // "
        m++;

    }
}
//-----------------------------------------
package Vasu;

import java.util.Arrays;

public class Second {
    public double rule;

    public void rules(long[] arr) {
        if (arr[n - m] > 2) { // m and n cant be resolved into a variable
            rule=1;
            System.out.println("Array: " + Arrays.toString(arr));
        }
    }
}

【问题讨论】:

  • 你了解staticnon-static的区别吗?查看 Oracle 的 Java 教程中的 Classes and Objects 课程。

标签: java arrays class methods


【解决方案1】:

main() 中,您无法访问nmarr,因为它们是非静态的。这可以通过将它们更改为静态来“修复”:

public class First {

    public static int n = 5;
    public static int m = 0;
    public static long[] arr = new long[n];

    public static void main(String[] args) {
        Second C = new Second();
        arr[n - m] = m;
        C.rules(arr);
        m++;
    }
    
}

我在“固定”周围使用了引号,因为我们不知道这些值是如何在您的程序的更大上下文中使用的。这可能没问题,或者它可能会破坏其他部分......我们必须更多地了解您的程序才能进行调用。

请注意,当调用c.rules(arr) 时,我们只需传递数组的名称。您尝试与 c.rules(arr[n - m]) 一起使用的语法是传递单个值,而该方法需要对整个数组的引用。

在第二类中,我们现在可以访问nm,方法是在它们前面加上它们的类名,如First.nFirst.m。这是静态指定允许您执行的操作:

public class Second {

    public double rule;

    public void rules(long[] arr) {
        if (arr[First.n - First.m] > 2) {
            rule=1;
            System.out.println("Array: " + Arrays.toString(arr));
        }
    }
    
}

另一种方法是将nm 与数组一起传递给rules()。但是,使用这种方法,您将无法更改 nm 并将这些更改反映在 First 类中。

如果您不能将nmarr 作为静态成员,那么您需要在main() 中创建First 的实例以访问这些成员。这样做也意味着您可以将对 First 的引用传递给 Second 并以这种方式访问​​值。

如果不更好地了解您的应用,我们无法为您做出这些艰难的设计决策。

你肯定需要掌握static 的含义,否则你在这个问题上不会有太大进展。

【讨论】:

    【解决方案2】:

    您的错误是您在C.rules(arr[n - m]); 行中传递了一个长变量而不是长数组,请尝试传递参数C.rules(arr);(不带[n-m])。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-16
      • 1970-01-01
      • 1970-01-01
      • 2020-01-29
      • 1970-01-01
      • 2020-12-22
      • 1970-01-01
      相关资源
      最近更新 更多