2013-03-29 120 views
0

我得到一个编译器错误:编译器错误“不兼容类型”

Exercise.java:47: error: incompatible types Time endTime = startTime.addMinutes(minutes);

         ^

要求:时间 发现:无效 1错误

我试图使用方法这个:

public void addMinutes(int mins) { 
    this.mins += mins; 
    if (this.mins >= 60) { // check if over 
     addHours(this.mins/60); 
     this.mins = this.mins % 60; 
    } 
    } 

我不知道为什么。

import java.util.*; 
    import java.io.*; 

    public class Exercise { 

     private String exercise; 
     private int minutes; 
     private Time startTime; 
     private Time endTime; 
     private int addedminutes; 



     public Exercise(String exercisetype, int m, Time start) { 
     this.exercise = exercisetype; 
     this.minutes = m; 
     this.startTime = start; 
     } 


     public String getType() { 
     return this.exercise; 
     } 


     public int getMinutes() { 
     return this.minutes; 
     } 


     public Time getStart() { 
     return this.startTime; 
     } 


     public Time getEnd() { 
     Time endTime = startTime.addMinutes(minutes); 
     return endTime; 
     }   



     public int addMinutes(int added) { 
     addedminutes = this.minutes + added; 
     return addedminutes; 
     } 


     public Time setStart(Time newstart) { 
     this.startTime = newstart; 
     return newstart; 
     } 


     public String toString() { 

     String startStandard = startTime.getStandard(); 
     String endStandard = endTime.getStandard(); 

     String toReturn = (this.exercise + " for " + this.minutes + " minutes," + " from " + startStandard + " to " + endStandard); 
     return toReturn; 
     } 

     public boolean equals(Exercise exTwo) { 
     return exercise == exTwo.exercise && minutes == exTwo.minutes && startTime == exTwo.startTime; 
     } 

     private static String exercisetype; 
     public static String getTypes() { 
     String types = ("Exercise types: " + Exercise.exercisetype); 
     return types; 
     } 
}  
+0

Time类定义在哪里?没有导入它或代码。 – OldProgrammer

+0

你的'addMinutes'方法不返回任何东西,它是'void'类型。你的方法通过调用'this.mins + = mins;'来改变'Exercise'对象的内部状态。 –

回答

2

addMinutes不返回一个值(void返回类型)。相反,它会更改所调用的Time对象的状态。

要么,它完成后,如改变返回时间的方法:

public Time addMinutes(int mins) { 
    this.mins += mins; 
    if (this.mins >= 60) { // check if over 
     addHours(this.mins/60); 
     this.mins = this.mins % 60; 
    } 
    return this; 
} 

或更改您的使用情况是这样的:

public Time getEnd() { 
    Time endTime; 
    startTime.addMinutes(minutes); 
    //This seems wrong, by the way. startTime will be modified by this call. 
    endTime = startTime; 
    return endTime; 
} 

或者更简单地说:

public Time getEnd() { 
    startTime.addMinutes(minutes); 
    return startTime; 
} 
+0

或者更简单地'return startTime.addMinutes(minutes);' – Smit

+0

@Smit这是最初的问题。由于该示例旨在解决addMinutes方法应保持不变的情况,因此它仍将具有void返回类型,因此这将不正确。 – femtoRgon

+0

+1我明白你的观点,我正在谈论你的'getEnd()'方法的返回类型。 – Smit

0

addMinutes不返回Timevoid)的实例,所以你不能把它分配给endTime

0

你有这样一行:

Time endTime = startTime.addMinutes(minutes); 

,但你必须声明addMinutes:

public void addMinutes(int mins) 

W它没有返回任何东西,所以没有返回值分配给endTime。