【问题标题】:Having trouble calling a boolean method into another class将布尔方法调用到另一个类时遇到问题
【发布时间】:2017-11-19 02:46:27
【问题描述】:

我无法将布尔方法调用到另一个类中。无论我尝试什么,程序要么找不到变量,要么警告我尝试在静态上下文中使用非静态变量。

我试图访问的布尔代码

public boolean isSame(String title, String author)
{
    return this.title.equals(title) &&
           this.author.equals(author);
}

我用来访问该方法的(当前)代码(我知道这是错误的)

public void copyCount(String title, String author)
{
    int numberOfCopy = 0;
    boolean Book.isSame = false;
        if(isSame == true) {
            numberOfCopy++;
        }  
    System.out.println(copyCount);
}

本质上,copyCount 方法(来自“Library”类)应该采用 2 个 String 参数并使用 isSame 方法(来自“Book”类)对其进行测试。如果书籍详细信息与给定的匹配,isSame 返回 true,否则返回 false。

如何正确引用另一个类的 isSame 方法?谢谢。

【问题讨论】:

    标签: java


    【解决方案1】:

    如何正确引用另一个类的 isSame 方法?

    看起来您需要一个 Book 类的实例...

    Book book = new Book("myTitle", "myAuthor");  // I'm just guessing there's a constructor like this
    boolean same = book.isSame("anotherTitle", "anotherAuthor");
    // 'same' will be false
    

    【讨论】:

    • Book 的唯一构造函数是:books = new ArrayList();我应该提到这一点。我无法指定书名或作者,因为它取决于已创建的内容。当我使用使用对象台的软件 BlueJ 时,我让自己非常困惑..
    • 你在Book 类上有setAuthor()setTitle 方法吗? (您可以使用它们而不是在构造函数中传递作者/标题。)
    • public void numberOfCopies(String title, String author) { int numberOfCopy = 0; for(Book a: books) { if(isSame == true) { numberOfCopy++; } System.out.println(numberOfCopy); } } 这是我现在拥有的代码,我意识到现在我需要将 ArrayList 的每个组件与给定的作者/标题值进行比较。我没有 setAuthor 或 setTitle 方法,因为它们是在 Book 构造函数中定义的。但是,使用当前代码,它仍然找不到 isSame 作为有效变量。
    • 我没有看到任何地方(问题或 cmets)isSame 被声明为变量——我看到它被声明为方法。要使用该方法,您将始终需要 (1) 在实例上调用它(例如 myBook.isSame)和 (2) 传递参数(例如 myBook.isSame("foo", "bar")
    • 抱歉,我应该说方法而不是变量(对此非常新)。你的建议奏效了!我实际上并没有正确调用该方法。这是我运行for(Book a: books) { if(a.isSame(title, author) == true) {所需的代码部分,它现在完全按照预期工作。非常感谢!我想用头撞墙,我敢肯定从这里开始会变得更糟..!
    【解决方案2】:

    如果您的两种方法属于不同的类。

    你只能访问静态方法而不创建类的对象。如果您的 isSame 方法是静态的,那么您可以使用 Book.isSame() 来访问,但如果您的 isSame 方法不是静态的,那么您需要创建 Book 类的对象,然后使用该对象访问 isSame 方法。

    请看下面的代码:

    Book book = new Book();
    boolean result = book.isSame("title","author");
    

    如果有的话,在构造函数中传递变量。顺便说一下,代码只是展示流程的一个例子。

    【讨论】:

    • 我无法创建 Book 类的对象,因为代码需要对创建的任何对象起作用。我应该指定,此代码使用 ArrayList (books = new ArrayList();)
    【解决方案3】:

    根据要求,早期的答案可能是正确的,但这听起来像是需要equals 方法。

    按照惯例,Java 对象都有一个equals 方法,当您希望确定两个对象是否相等时,应该重写它。在这里,由于您将 Strings 附加到平等,因此很难推断出平等是您真正想要的。

    这是一个例子:

    public boolean equals(Book other) {
        return null != other && this.title.equals(other.title) &&
           this.author.equals(other.author);
    }
    

    您需要修改您的 copyCount 方法以获取 Book 的实例,而不是 authortitle,但这会是一个整体上更好的设计。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-18
      • 2019-09-18
      • 2014-03-25
      • 1970-01-01
      • 1970-01-01
      • 2020-09-26
      • 1970-01-01
      相关资源
      最近更新 更多