2017-03-08 122 views
-2

有人能看到为什么我收到错误“不兼容的类型,NumberDisplay不能转换成int”类型不兼容,不能转换成int

原来的项目没有包括秒,所以我想补充它,但是当我尝试时,我得到了错误。

我试过改变数值,没有帮助。

public class ClockDisplay 
{ 
private NumberDisplay hours; 
private NumberDisplay minutes; 
private NumberDisplay seconds; 
private String displayString; // simulates the actual display 

/** 
* Constructor for ClockDisplay objects. This constructor 
* creates a new clock set at 00:00. 
*/ 
public ClockDisplay() 
{ 
    hours = new NumberDisplay(24); 
    minutes = new NumberDisplay(60); 
    seconds = new NumberDisplay(60); 
    updateDisplay(); 
} 

/** 
* Constructor for ClockDisplay objects. This constructor 
* creates a new clock set at the time specified by the 
* parameters. 
*/ 
public ClockDisplay(int hour, int minute, int seconds) 
{ 
    hours = new NumberDisplay(24); 
    minutes = new NumberDisplay(60); 
    seconds = new NumberDisplay(60); 
    setTime(hour, minute); 
} 

/** 
* This method should get called once every minute - it makes 
* the clock display go one second forward. 
*/ 
public void timeTick() 
{ 
    seconds.increment(); 
    if(seconds.getValue() == 0) { // it just rolled over! 
     minutes.increment(); 
    } 
    updateDisplay(); 
} 

/** 
* This method should get called once every minute - it makes 
* the clock display go one minute forward. 
*/ 
public void timeTickTwo() 
{ 
    minutes.increment(); 
    if(minutes.getValue() == 0) { // it just rolled over! 
     hours.increment(); 
    } 
    updateDisplay(); 
} 

/** 
* Set the time of the display to the specified hour and 
* minute. 
*/ 
public void setTime(int hour, int minute, int seconds) 
{ 
    hours.setValue(hour); 
    minutes.setValue(minute); 
    seconds.setValue(second); 
    updateDisplay(); 
} 

/** 
* Return the current time of this display in the format HH:MM. 
*/ 
public String getTime() 
{ 
    return displayString; 
} 

/** 
* Update the internal string that represents the display. 
*/ 
private void updateDisplay() 
{ 
    displayString = hours.getDisplayValue() + ":" + 
        minutes.getDisplayValue() + ":" + 
        seconds.getDisplayValue(); 
} 



public class NumberDisplay 
{ 
private int limit; 
private int value; 

/** 
* Constructor for objects of class NumberDisplay. 
* Set the limit at which the display rolls over. 
*/ 
public NumberDisplay(int rollOverLimit) 
{ 
    limit = rollOverLimit; 
    value = 0; 
} 

/** 
* Return the current value. 
*/ 
public int getValue() 
{ 
    return value; 
} 

/** 
* Return the display value (that is, the current value as a two-digit 
* String. If the value is less than ten, it will be padded with a leading 
* zero). 
*/ 
public String getDisplayValue() 
{ 
    if(value < 10) { 
     return "0" + value; 
    } 
    else { 
     return "" + value; 
    } 
} 

/** 
* Set the value of the display to the new specified value. If the new 
* value is less than zero or over the limit, do nothing. 
*/ 
public void setValue(int replacementValue) 
{ 
    if((replacementValue >= 0) && (replacementValue < limit)) { 
     value = replacementValue; 
    } 
} 

/** 
* Increment the display value by one, rolling over to zero if the 
* limit is reached. 
*/ 
public void increment() 
{ 
    value = (value + 1) % limit; 
} 
} 
+1

您需要编辑您的文章并添加'NumberDisplay'代码。此外,请告诉我们哪条线可以给您提供错误。 –

+1

这是否编译?你似乎用错误数量的参数调用'setTime'。 – Berger

回答

4

在该方法中

public ClockDisplay(int hour, int minute, int seconds) 
               ^^^^^^^ 
{ 
    hours = new NumberDisplay(24); 
    minutes = new NumberDisplay(60); 
    seconds = new NumberDisplay(60); 
    ^^^^^^^ 
    setTime(hour, minute); 
} 

线

seconds = new NumberDisplay(60); 

试图分配一个NumberDisplayseconds,这是局部参数变量,并且是int。你应该将其更改为

this.hours = new NumberDisplay(24); 
    this.minutes = new NumberDisplay(60); 
    this.seconds = new NumberDisplay(60); 

一般是在构造函数或setter OK命名的参数一样的成员变量,但你应该进入始终在分配的左手使用this.的习惯以避免这个问题。

+1

它是最好的变量阴影 – Zeromus

+0

并且是构造函数/设置函数中的一种公认的技术,可以防止不必要地创建额外的变量名称,从而增加认知负载。 –

相关问题