【问题标题】:Java - How do I get a variable generated from within a method in one class to another class?Java - 如何获取从一个类的方法内生成的变量到另一个类?
【发布时间】:2014-09-09 03:44:04
【问题描述】:

我还是 Java 新手,所以请原谅即将摆在您面前的无数菜鸟错误。 所以我会澄清的。变量是从基于数组的方法中生成的。

public class Track {
    public final int[] classN = { 5, 1 };
    public final int[] classD = { 10, 1 };
    public final int[] classC = { 15, 2 };
    public final int[] classB = { 20, 2 };
    public final int[] classA = { 25, 3 };
    public final int[] classS = { 30, 3 };
    public final int[] classSS = { 50, 3 };
    public final int[][] arTrackClass = { classN, classD, classC, classB, classA, classS, classSS };
    public static final String[] arNameClass = { "N", "D", "C", "B", "A", "S", "SS" };

    public int trackLength = 5; //I need to put it outside of the modifier to get anything else to access it.

    public void getRaceClass() {
        int tClass = (int) Math.floor(Math.random()*arTrackClass.length));
        trackLength = arTrackClass[tClass][0];  //This is the important bit for elsewhere
        tMaxDiff = arTrackClass[tClass][1];
        String nameClass = arNameClass[tClass];
        System.out.println("The track will be a " + nameClass + " class race with " + trackLength + " lengths.");

    }
}

所以这就是我用来生成曲目长度的方法。从 5 到 50 长度。这没问题,对我来说效果很好。当我稍后尝试调用 trackLength 来告诉我的 for 循环在绘制图形时要循环多少次时,问题就来了。

public class Graph {

    public drawGraph() {
        for ( int i=0; i<=Track.trackLength; i++ ) {
            //Code
        }
    }
}

然后在我的主课中,无论我做什么,我都无法让 drawGraph() 中的 trackLength 等于 getRaceClass() 中生成的 trackLength。

public class Main {
    public static void main(String[] args) {
        Track track = new Track();
        track.getRaceClass()

        Graph graphing = new Graph();

        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                graphing.createAndShowGUI();
            }
        });
    }
}

如果需要更多信息,请告诉我,我会尽可能提供。 我只需要在生成变量后调用它。或者,如果其他人有想法,我总是愿意听更有经验的人。

【问题讨论】:

  • 在您的Graph 类中,您是否曾经创建过Track 的实例或对象?像Track myTrack = new Track() 这样的东西。从您发布的内容来看,您似乎在 Main 中制作了一个,您可能希望通过构造函数参数将其传递给 graphing
  • Track的引用传递给Graph...
  • 是的,但即便如此,它也会调用我必须为外部访问初始化的预设 trackLength,而不是在 getTrackClass() 之后生成的那个
  • 您确定您的方法getRaceClass() 不只是将变量设置为与您最初设置的值相同的值吗?例如,如果将public int trackLength = 5; 更改为public int trackLength = 50;,是否仍会得到类似的结果?
  • 是的,如果我手动更改 trackLength 的值,它会生成不同大小的图表。这就是为什么出于调试原因,我让它打印 trackClass 并随机选择 Length 到控制台。如果它要求一个长度为 50 的 SS 竞赛,它仍然只会将 5 个循环写入图表。

标签: java class variables methods


【解决方案1】:

您需要向Graph 提供Track 的实例,它将与之一起工作...

public class Graph extends ... {
    private Track track;
    //...
    public Graph(Track track) {
        //...
        this.track = track;
        //...

那么当Graph需要Track的信息时,可以简单的使用track

public drawGraph() {
    for ( int i=0; i<=track.trackLength; i++ ) {
        //Code
    }
}

然后,您只需将Track 实例的引用传递给Graph,例如...

Track track = new Track();
track.getRaceClass()

Graph graphing = new Graph(track);

【讨论】:

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