【问题标题】:How can I use the data from a HashMap inside a method in another method?如何在另一个方法中使用方法内的 HashMap 中的数据?
【发布时间】:2021-07-06 17:17:38
【问题描述】:

所以我想在 Clicked 方法的 clickRegister 方法中使用添加到 HashMap 的数据。但据我所知,数据并未保存在方法之外。我假设那是因为它超出了范围? (我是编程新手,如果我错了,请纠正我)。我怎样才能做到这一点?甚至有可能吗?

public class Controller {
    private HashMap<String, String> userList = new HashMap<String, String>();

    public void Clicked(ActionEvent actionEvent) throws IOException {
        String cpr = cprField.getText();
        String password = passwordField.getText();

        if (userList.containsKey(cpr) && userList.containsValue(password)){
            Stage stage1;
            Parent root1;
            stage1 = (Stage) loginButton.getScene().getWindow();
            root1 = FXMLLoader.load(getClass().getResource("home.fxml"));
            Scene scene = new Scene(root1);
            stage1.setScene(scene);
            stage1.show();
        } else {
            System.out.println("Wrong credentials");
        }
    }

    public void clickRegister(ActionEvent actionEvent) throws IOException {
        if (cprFieldReg.getText().equals("") && passwordFieldReg.getText().equals("")){
            System.out.println("Fill in blank fields");
        } else {
            String username = cprFieldReg.getText();
            String password = passwordFieldReg.getText();

            userList.put(username, password);
        }
    }
}

【问题讨论】:

  • HashMap被定义为一个全局变量,所以你可以在整个instance中使用它。确保使用调试器或控制台打印地图已实际更新。如果是这样,请确保您没有从控制器对象 A 调用 clickRegister() 并从另一个控制器对象 B 调用 Clicked()
  • @Babyburger 将其用作整个实例是什么意思? ://

标签: java scope


【解决方案1】:

您只需要了解变量范围如何用于变量声明。在所有语言中几乎都是一样的。声明包括方法和构造函数参数声明和变量声明。

可能的范围包括:

  • 全局范围(可以从程序的每个部分访问声明)
  • 类范围(可以从类的每个部分访问声明)
  • 实例范围(可从实例方法访问声明)
  • 方法范围(可以从方法中的任何位置访问声明)
  • 局部范围(可以从花括号中访问声明)

cpr 变量在方法中声明,因此其范围仅限于该方法。如果将声明从Click 方法中移到HashMap 声明的下方,则整个类都可以访问该变量。我认为这可能是您在这种情况下所需要的。

这里有更多信息:https://en.wikibooks.org/wiki/Java_Programming/Scope

【讨论】:

  • 这不起作用:/ 它只是给了我这个错误:Cannot invoke "javafx.scene.control.TextField.getText()" because "this.cprField" is null"
  • 恭喜,您解决了一个问题,却发现它揭示了下一个问题。调试就是这样工作的。您需要在引用 cprField 的值之前对其进行初始化。
猜你喜欢
  • 2015-08-19
  • 1970-01-01
  • 2019-04-14
  • 1970-01-01
  • 1970-01-01
  • 2018-10-19
  • 1970-01-01
  • 2016-06-22
  • 2013-04-11
相关资源
最近更新 更多