如何从另一个类访问数组

时间:2016-05-06 11:30:18

标签: java multithreading

我想操作名为"玩家"在main方法中声明。我想用#34;球员"在我的课堂上叫做#34; Glucksspielthread" 我知道我无法访问"玩家"因为它在main方法中声明,对其他类不可见。

我该如何解决这个问题?这是我的代码:

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Glucksspieltest {
    public static void main(String[] args) {
        int numPlayers = Integer.parseInt(args[0]);
        int threadSize = Integer.parseInt(args[1]);

        ExecutorService es = Executors.newFixedThreadPool(threadSize);
        Glucksspielthread[] players = new Glucksspielthread[numPlayers];
        for (int i = 0; i < numPlayers; i++) {
            players[i] = new Glucksspielthread(i);
            es.execute(players[i]);
        }
    }
}

class Thinker {
    public static void think(int Millisekunden) {
        try {
            Thread.sleep(Millisekunden);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    public static void randomThink(int minMillisekunden, int      maxMillisekunden) {
        System.out.println("test");
    }
}

class Glucksspielthread implements Runnable {
    public int playerNumber;

    Glucksspielthread(int number) {
            playerNumber = number;
    }

    @Override
    public void run() {
        for (int i = 0; i <= playerNumber; i++) {
            // here, I want to operate on array called "players" that is   declared in the main method  
        }
    }
}

3 个答案:

答案 0 :(得分:1)

为了您的测试目的,让您的玩家在Glucksspieltest课程中变为静态和公开,如下所示:

Order

然后在Glucksspielthread类中访问它,如下所示:

public class Glucksspieltest {

public static Glucksspielthread[] players;

答案 1 :(得分:1)

向类Glucksspieltest添加方法,并将player数组设为全局:

public class Glucksspieltest {
    private static Glucksspielthread[] players;

    public static Glucksspielthread[] getPlayers(){
        return players;
    }

    public static void main(String[] args) {
        int numPlayers = Integer.parseInt(args[0]);
        int threadSize = Integer.parseInt(args[1]);

        ExecutorService es = Executors.newFixedThreadPool(threadSize);
        players = new Glucksspielthread[numPlayers];
        for (int i = 0; i < numPlayers; i++) {
            players[i] = new Glucksspielthread(i);
            es.execute(players[i]);
        }
    }
}

这样您就可以通过调用getPlayers()方法来获取数组。

(请注意,建议添加构造函数来初始化和填充players数组,并将玩家管理与main方法分开。)

答案 2 :(得分:0)

将玩家作为私人全球参与变量

public class Glucksspieltest {
//Make a Global reference variable players
   private static Glucksspielthread[] players; 

// Make a getter Method to get players
 public static Glucksspielthread[] getPlayers(){
    return players;
}

    public static void main(String[] args) {
        int numPlayers = Integer.parseInt(args[0]);
        int threadSize = Integer.parseInt(args[1]);

        ExecutorService es = Executors.newFixedThreadPool(threadSize);

        players = new Glucksspielthread[numPlayers];
        for (int i = 0; i < numPlayers; i++) {
            players[i] = new Glucksspielthread(i);
            es.execute(players[i]);
        }
    }
}

通过Glucksspieltest.getPlayers();

访问它
class Glucksspielthread implements Runnable {
    public int playerNumber;

     private static Glucksspielthread[] players;

    Glucksspielthread(int number) {
            playerNumber = number;
    }

    @Override
    public void run() {
        for (int i = 0; i <= playerNumber; i++) {
            // here, I want to operate on array called "players" that is declared in the main method  
         players= Glucksspieltest.getPlayers();  // play with players
        }
    }
}