2016-06-09 38 views
0

使用Check类,添加代码以使Checks排序为checkNumber使用Check类,添加代码以使支票按checkNumber排序

import java.util.Date; 

public class Check implements Comparable { 

    private int checkNumber; 
    private String payTo; 
    private Date date; 
    private float amount; 

    public int compareTo(Object arg0) { 
     //Insert code here 

    } 

    public int getCheckNumber() { 
     return checkNumber; 
    } 

    public void setCheckNumber(int checkNumber) { 
     this.checkNumber = checkNumber; 
    } 

    public String getPayTo() { 
     return payTo; 
    } 

    public void setPayTo (String payTo) { 
     this.payTo = payTo; 
    } 

    public Date getDate() { 
     return date; 
    } 

    public void setDate (Date date) { 
     this.date = date; 
    } 

    public float getAmount() { 
     return amount; 
    } 

    public void setAmount (float amount) { 
     this.amount = amount; 
    } 
} 

我的解决方案如下,但它似乎并没有工作。

任何人都可以帮我解决这个问题吗?

public int compareTo(Object arg0) { 
    if(this.checkNumber == arg0.checkNumber) 
     return 0; 
    else 
     return this.checkNumber > arg0.checkNumber ? 1 : -1; 
} 

回答

0

您没有指定“不工作”的意思,但是读取您的代码,我假设您收到编译错误。

原因是因为您给出的代码没有指定可比较的类型,所以它不知道您甚至想要比较它的类型。它将默认使用Object,它不会(通过设计)知道Check的字段和方法。

以下修改是最好的解决办法:

public class Check implements Comparable<Check> { 

    public int compareTo(Check arg0) {/* ...*/ } 
} 

这将迫使你这只比其他Check的,并为arg0一个Check对象,渲染其领域,提供给您的方法。

如果你考虑到问题的参数不允许修改所提供的代码,然后(非常非常远)第二个最好的解决办法是:

public int compareTo(Object arg0) { 
    Check other = null; 
    if(arg0 instanceof Check) 
     other = (Check)arg0; 
    // Other checks. 
} 

这种调整会技术上工作的在规定您不允许修改提供的代码的问题上,但由于Comparable的合同要求指定要比较的对象的类型,并且未指定它可能会引入问题,因此无法建议。

事实上,我会说你完全被允许告诉给你这个问题的人,他们是一个可怕的人,因为你在这个问题上给你一个问题,因为没有指定一个Comparable类型是一个真正的不好的做法。特别是如果他们教你如何编程。

+0

是的,这是错误。是的,这是代码给没有进一步的指示,所以甚至没有构造函数或我可以使用的东西或什么这就是为什么我感到困惑。 – Premo

+0

缺少构造函数不是问题(至少在技术上,它是一种风格的错误),你可以用'new Check()'初始化一个实例,并用setter填充字段,因为没有其他构造函数存在。对于Comparable的东西,你可能希望阅读[Generic Types](https://docs.oracle.com/javase/tutorial/java/generics/types.html)和[Comparable Javadoc](https:// docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html)。 –