【问题标题】:Trouble incorporating getter into a static method将 getter 合并到静态方法中时遇到问题
【发布时间】:2019-04-30 23:55:27
【问题描述】:

我的第一个目标也是编写一个代表一本书的类,并编写一个 getFinishedPercent 方法。我相信这一切都是正确的。

我的第二个目标是编写一个带有一个名为 compareBooks 的静态方法的类,该方法接收两个书籍对象作为参数,并打印出阅读次数最多的书籍的标题(按百分比)。如果两个百分比相同,它将打印。 “哇,一条领带!”。

我已经编写了包含我的字段、getter 和 mutators 的类 Book,但我不确定如何将其合并到我的 compareBooks 类中......

图书课

 public class Book {

private String title; 
private String author; 
private int pages; 
private int lastPageRead; 

public Book(String title, String author, int pages, int 
 lastPageRead) {
    this.title = title; 
    this.author = author;
    this.pages = pages;
    this.lastPageRead = lastPageRead;

}
public String getTitle() {
    return title;
}
public String getAuthor() {
    return author;
}
public int getPages() {
    return pages;
}
public int lastPageRead() {
    return lastPageRead;
}
public double getFinishedPercent() {
    double percent = 0;
    percent = lastPageRead / pages;
    return percent;
}
 }

比较书籍类

 public class compareBooks {

public static void main(String [] args) {

    Book book1 = new Book("Building Java Programs", "Stuart 
 Reges & Marty Stepp", 1194, 586);
    Book book2 = new Book("Java is hard","Brian May", 1334,  
 23);   

 }
 }

【问题讨论】:

    标签: java static accessor mutators


    【解决方案1】:
    public static void compare(Book book1, Book book2){
        if(book1.getFinishedPercent() == book2.getFinishedPercent()){
            System.out.println("Wow, a tie!");
        }else{
          //other logic
        }
    }
    
    public static void main(String [] args) {
    
        Book book1 = new Book("Building Java Programs", "Stuart 
     Reges & Marty Stepp", 1194, 586);
        Book book2 = new Book("Java is hard","Brian May", 1334,  
     23);   
         compare(book1, book2);
     }
    

    你可以这样做。在这种情况下,如果您的方法是静态的(或不是)并不重要。

    【讨论】:

    • 我尝试了你写的,但我每次都得到平局声明。
    【解决方案2】:

    试试这个:

    class compareBooks {
    
    public static class Book {
    
        private String title;
        private String author;
        private double pages;
        private double lastPageRead;
    
        Book(String title, String author, int pages, int
                lastPageRead) {
            this.title = title;
            this.author = author;
            this.pages = pages;
            this.lastPageRead = lastPageRead;
    
        }
        public String getTitle() {
            return title;
        }
        public String getAuthor() {
            return author;
        }
        public double getPages() {
            return pages;
        }
        public double lastPageRead() {
            return lastPageRead;
        }
        public double getFinishedPercent() {
    
            return lastPageRead / pages;
    
        }
    }
    
    public static void main(String [] args) {
    
        Book book1 = new Book("Building Java Programs", "Stuart Reges & Marty Stepp",
                1194, 586);
    
        Book book2 = new Book("Java is hard","Brian May", 1334,
                23);
    
    
        System.out.println(book1.getFinishedPercent());
    
      }
    }
    

    【讨论】:

      【解决方案3】:

      对于仍在访问此问题的任何人,Victor 的解决方案看起来不错,我认为 OP 非常接近正确的解决方案。 OP 每次都得到相同结果的原因是因为 getFinishedPercent() 将较小的整数除以较大的整数,并且由于我们只处理整数,因此每次都将结果截断为 0,然后将其保存为事后翻倍。无需强制转换甚至声明其他变量的简单修复方法是替换:

      public double getFinishedPercent() {
          double percent = 0;
          percent = lastPageRead / pages;
          return percent;
      }
      

      ...与...

      public double getFinishedPercent() {
          return (lastPageRead*1.0) / pages;
      }
      

      对于在 Google 上搜索过这个作业问题并且对整数除法这个主题不熟悉的任何人,这里有一个关于 Java 基础数学的快速回顾页面:https://mathbits.com/MathBits/Java/DataBasics/Mathoperators.htm

      【讨论】:

        猜你喜欢
        • 2016-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-25
        相关资源
        最近更新 更多