【问题标题】:Accessing variable in Main method from other class从其他类访问 Main 方法中的变量
【发布时间】:2013-11-25 04:00:38
【问题描述】:

我有两个班级:

public class node {
  static LinkedList<Integer> nodes = new LinkedList<Integer>();
  public boolean visited;

  public static void Main (String args []) {
    System.out.println("Number of nodes in network");
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();

    for (int i=1;i<=n;i++){
      nodes.add(i);
    }

    System.out.println(nodes);
  }

和另一个班级

public class AdjacencyList {
  private int n;
  private int density;

我想从Main方法访问int n,并将其值分配给AdjacencyList类中的private int n。我尝试了node.n (class.variable) 格式,我可以在其中分配值,但它不起作用。有人可以帮我解决这个问题吗?

【问题讨论】:

  • 我想你希望 n 成为 static
  • "n" 必须是 public & static,或 private & static bud,你必须有方法来获取 n :)
  • 哪一个?来自 AdjacencyList 类或节点类的一个?
  • AdjacencyList 类。
  • 您打算如何使用main 中的n 以及您想在main 中的何处创建AjacentList

标签: java main-method


【解决方案1】:

改成

public static int n;

那么你可以像这样访问任何地方..

AdjacencyList.n

【讨论】:

  • 这实际上是一个非常糟糕的解决方案。变量不应该是公开的。无论如何,如果你想这样做,“AdjacencyList”必须是静态的
  • @iberbeu 当它是一个小程序时,为什么不这样做。不像它会混淆任何人。但他应该为该变量选择另一个名称,这可能会在以后混淆。
  • 我会更改变量的名称。它已经开始让我感到困惑了.. @iberbeu 我可以知道为什么变量不应该公开吗?
  • 作为通用模式的变量应该被声明为私有的。然后,您将提供 getter 和 setter 来访问它。如果这样做,您可以确保您的班级始终管理其字段变化的方式。所以通常,将属性声明为公共是一件坏事。有时它是需要的。反正我不推荐。问题可能是:为什么变量应该是私有的?
【解决方案2】:

简单地说,

public class AdjacencyList {
    private int n;
    private int density;

    //method to get value of n
    public int getN() { return this.n; }

    //method to set n to new value
    public void setN(final int n) { this.n = n; }

然后,在你的 main() 中,你可以这样做:

AdjacencyList myList = new AdjacencyList();

//set n to any value, here 10
myList.setN(10);

//get n's current value
int currentN = myList.getN();

所有这些都是基本的 java 内容,请再次查看文档,尤其是 herehere

【讨论】:

    【解决方案3】:

    你不能。局部变量(在函数内部定义的变量)的作用域仅限于此函数(此处为 Main,注意:习惯上以小写字符开头的函数名称)。

    如果你想从外部访问某个变量,它需要是类变量,并且你声明了访问它的函数(setN / getN 或类似的......)

    另外,由于函数是静态的,变量也需要是静态的。

    希望对你有帮助

    【讨论】:

      【解决方案4】:

      您可以这样做,也可以创建 AdjacencyList 的新实例并在构造函数中设置 n。然后使用 get() 函数访问 n。

      【讨论】:

        【解决方案5】:

        为n添加第二类公共setter,然后在main中创建一个AjacencyList实例并调用setter。

        【讨论】:

          猜你喜欢
          • 2012-08-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-10-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多