如何在 for 循环中使用从一个 class 到另一个的传递值?

How can you use a passed value from one class to another in a for loop?

所以我有一个用户字段,他们可以输入 1-10 作为玩家数量:

playersFld.setTextFormatter(new TextFormatter<String>(playersValidator));

custartBtn.addEventHandler(MouseEvent.MOUSE_CLICKED, actionEvent4 -> {

Integer playersNum = Integer.valueOf(playersFld.getText());
if (!playersNum.equals("")) {
                
                System.out.println("Got the values");
                try {
                    FXMLLoader loader = new FXMLLoader(getClass().getResource("/views/score_page.fxml"));
                    root = loader.load();
                    ScorePageCtrl scorePageCtrl = loader.getController();

                    scorePageCtrl.displayDate(strDate);
                    scorePageCtrl.recievePlayers(playersNum);

                    stage = (Stage) ((Node) actionEvent4.getSource()).getScene().getWindow();
                    scene = new Scene(root);
                    stage.setScene(scene);
                    stage.show();

                } catch (IOException e) {
                    e.printStackTrace();
                }


            } else {
                System.out.println("missing value(s)");
            }
});

我用这个方法将它传递给下一页的控制器:

public int recievePlayers(int plrNum){
    System.out.println("Players: " + plrNum);
    return plrNum;
}

sout 让我知道我得到了正确的数字,但我似乎无法将 returned 值传递给 for 数组

AtomicInteger tabs = new AtomicInteger(2);
    for (int i = 2; i <= recievePlayers(); i++) {
        if (tabs.get() <= 10) {
            tabPaneSP.getTabs().add(new Tab("Player" + tabs.getAndIncrement()));
            tabPaneSP.getSelectionModel().selectLast();
        } else {
            System.out.println("No more homies");
        }
    }

我试过方法名,整数名,making int p;然后将其附加到 return,但似乎没有任何效果。

编辑: 所以我试过改变一些东西,我可以让它工作,但出于某种原因,它每隔一段时间就会触发一次,这不太理想。

我改了:

public static int plrNum;

public int receivePlayers(int players) {
    System.out.println("Players: " + players);
    //Used to make sure I get the number datesSP.setText(String.valueOf(players));
    return this.plrNum = players;
}

然后用它来实例化,这样我就可以把它放在 for 循环中:

int n = plrNum;

但必须有更好的方法。

编辑:所以我更新了我的要点以反映当前正在运行的代码,但由于某种原因它只能每隔一段时间运行一次。

https://gist.github.com/Spider-Ian/3d5c777171d7ad632e9b71943fcf950c

你的方法有一个参数,但你调用它时没有。改成

public int recievePlayers() {

它应该可以工作。

小费!改成

public int receivePlayers() {

使其更易于使用。

例如,这种方式也可以。

public class Player {

    public int num;

    public int recievePlayers(int plrNum){
        System.out.println("Players: " + plrNum);
        return this.num = plrNum;
    }

}
    
    
    
  public static void main(String[] args) {
        
        
        Player player = new Player();
        player.recievePlayers(3);
        
        int n = player.num;
        
        AtomicInteger tabs = new AtomicInteger(2);
        for (int i = 2; i <= n; i++) {
            if (tabs.get() <= 10) {
                tabPaneSP.getTabs().add(new Tab("Player" + tabs.getAndIncrement()));
                tabPaneSP.getSelectionModel().selectLast();
                
            } else {
                System.out.println("No more homies");
            }
        }

}

好吧,控制器中显然有一个非常严格的事件过程。它加载 FXML 项目,初始化,然后寻找其他方法和有趣的东西来玩。所以,确保选项卡首先获取数据的方法,我可以用之前的控制器提前调用它们。

threeThirBtn.addEventHandler(MouseEvent.MOUSE_CLICKED, actionEvent1 -> {
        try {
            FXMLLoader loader = new FXMLLoader(getClass().getResource("/views/score_page.fxml"));
            root = loader.load();
            ScorePageCtrl scorePageCtrl = loader.getController();

            scorePageCtrl.displayDate(strDate);
            scorePageCtrl.displayEvent("3 x 30");
            scorePageCtrl.receivePlayers(3);
            scorePageCtrl.receivePlays(3);
            scorePageCtrl.receiveRounds(30);
//**Here is where I told the method to get the returned value before initialization**
            scorePageCtrl.addTabs();
            scorePageCtrl.addRows();

            stage = (Stage) ((Node) actionEvent1.getSource()).getScene().getWindow();
            scene = new Scene(root);
            stage.setScene(scene);
            stage.show();

        } catch (IOException e) {
            e.printStackTrace();
        }

        //TODO: Set the row and column numbers to thirty rows and three columns

        System.out.println("3 x 30 button clicked");

    });

我确实必须将 AtomicInteger 从初始化中移出并移到它自己的方法中。

public void addTabs() {
    int plr = plrNum;

    AtomicInteger tabs = new AtomicInteger(2);
    for (int i = 2; i <= plr; i++) {
        if (tabs.get() <= 10) {
            tabPaneSP.getTabs().add(new Tab("Player" + tabs.getAndIncrement()));
            tabPaneSP.getSelectionModel().selectLast();
        } else {
            System.out.println("No more homies");
        }
    }
    addPlayerBtn.setOnAction(event -> {
        if (tabs.get() <= 10) {
            tabPaneSP.getTabs().add(new Tab("Player" + tabs.getAndIncrement()));
            tabPaneSP.getSelectionModel().selectLast();
        } else {
            System.out.println("No more homies");
        }
    });
}

唯一让我不满意的是将 return 的 get 值作为一个可用的整数来获取值的次数。