Java 尝试使用我自己的方法时找不到符号错误

Java 尝试使用我自己的方法时找不到符号错误,java,object,methods,Java,Object,Methods,我有一个Time类,它有一个名为lessThan的比较方法 public boolean lessThan(时间t1,时间t2){ 如果(t1.getHours()>t2.getHours()){ 返回false; }else if(t1.getHours()==t2.getHours()){ 如果(t1.getMinutes()>=t2.getMinutes()){ 返回true; }否则 返回true; }否则 返回true; } 我想在我的主类中使用这个方法来比较传递给我的时间对象,从而

我有一个
Time
类,它有一个名为lessThan的比较方法

public boolean lessThan(时间t1,时间t2){
如果(t1.getHours()>t2.getHours()){
返回false;
}else if(t1.getHours()==t2.getHours()){
如果(t1.getMinutes()>=t2.getMinutes()){
返回true;
}否则
返回true;
}否则
返回true;
}
我想在我的主类中使用这个方法来比较传递给我的时间对象,从而对我的时间对象进行排序

publicstaticvoidsortappoints(ArrayList

但是我在编译时遇到了一个找不到符号的错误。我做错了什么?如何在主类中使用我自己的方法?

将您的方法设置为
静态
辅助函数,并以静态方式调用它,或者更改方法的签名以使用
中存在的
时间
实例,即

 public boolean lessThan( Time other ) {
    if (this.getHours() > other.getHours()) {
        return false;
    }
 }
然后在测试类中使用实例方法

boolean less = appointments.get(i).lessThan(appointments.get( i + 1 ));
 

同样对于列表的排序,一种更简单的方法是使您的
时间
实现
可比性
,然后使用
集合。排序(列表)

将您的方法设置为
静态
辅助函数,并以静态方式调用它,或者更改方法的签名,以使用
中存在的
时间
实例,即

 public boolean lessThan( Time other ) {
    if (this.getHours() > other.getHours()) {
        return false;
    }
 }
然后在测试类中使用实例方法

boolean less = appointments.get(i).lessThan(appointments.get( i + 1 ));
 
同样对于列表的排序,一种更简单的方法是使您的
时间
实现
可比性
,然后使用
集合

我有一个时间类,它有一个叫做lessThan的比较方法

我想在我的主类中使用这个方法

,很明显,你试图用

但是调用
lessThan()
,就像在主类的静态方法中一样,将针对主类解析方法名
lessThan
。您想要的方法不在那里,而是在
Time
类中

此外,您已经实现了
Time.lessThan(Time,Time)
作为实例方法,因此需要在
Time
的实例上调用它,但它似乎没有使用该实例。作为类
Time
的实例方法,如果它只接受一个参数,并评估调用它的实例是否小于该参数,那么它将更有意义。目前的情况是,如果该方法是静态的,那么它会更有用

解决此问题的最小更改集是

  • 使方法
    静态

    // In class Time
    public static boolean lessThan( Time t1, Time t2 ) { // ...
    

  • 在主类中这样调用它:

           if( !Time.lessThan( appointments.get( i ), appointments.get( i + 1 ) ) ) {
    
  • 你写

    我有一个时间类,它有一个叫做lessThan的比较方法

    我想在我的主类中使用这个方法

    ,很明显,你试图用

    但是调用
    lessThan()
    ,就像在主类的静态方法中一样,将针对主类解析方法名
    lessThan
    。您想要的方法不在那里,而是在
    Time
    类中

    此外,您已经实现了
    Time.lessThan(Time,Time)
    作为实例方法,因此需要在
    Time
    的实例上调用它,但它似乎没有使用该实例。作为类
    Time
    的实例方法,如果它只接受一个参数,并评估调用它的实例是否小于该参数,那么它将更有意义。目前的情况是,如果该方法是静态的,那么它会更有用

    解决此问题的最小更改集是

  • 使方法
    静态

    // In class Time
    public static boolean lessThan( Time t1, Time t2 ) { // ...
    

  • 在主类中这样调用它:

           if( !Time.lessThan( appointments.get( i ), appointments.get( i + 1 ) ) ) {
    

  • 在用Java编写更多代码之前,您可能想了解
    static
    关键字的含义。此外,我建议您在if-else语句中始终使用花括号。尽管Java允许在单行语句中使用不带花括号的语法,但它会导致难以发现的逻辑错误?(它找不到哪个符号?)(我想它的
    小,但是养成总是指定确切错误及其显示位置的习惯是值得的。)@SoftwareEngineer,您可能想继续阅读。虽然这涉及到C而不是Java代码,但原理是一样的。在
    if
    else
    和loop body block周围始终使用花括号是防止犯此类错误的一种很好的文体做法。就我个人而言,我只对作为
    else
    语句(整个)主体的
    if
    语句例外。在Java上下文中,特别相关的是(从1997年开始)为
    if
    else
    主体指定了始终使用花括号的相同做法,尽管现在比过去少了,除非
    else
    的主体仅包含
    if
    语句。他们将大括号的省略描述为“容易出错”。在用Java编写更多代码之前,您可能想了解
    static
    关键字的含义。此外,我建议您在if-else语句中始终使用大括号。尽管Java允许在单行语句中使用不带花括号的语法,但它会导致难以发现的逻辑错误