//Single parameter
public Time(double input){
number= 20.75;
double temp ;
temp= (number%1*60*100)/100; // Prints out 0.00 why?
minutes= (int)temp;
hours= (int)number-(int)number%1;
}
我的代码工作得很好,但我对于为0.00
变量打印45.0000
而不是temp
的原因感到有点困惑。
我认为它如何运作: number
= 20.75,因此20.750000%1 = 0.750000 * 60 * 100/100 = 45.0000,因此temp
= 45.00000。
以下是完整代码:
public class TimetestProgram {
public static void main(String[]args){
Time object = new Time(20,329);
Time gamma= new Time(20.75);
System.out.println(object);
System.out.println(gamma);
System.out.println("temp:"+gamma.temp);
System.out.println("minutes:"+gamma.minutes);
System.out.println("number:"+gamma.number%1);
}
}
// Double parameter
class Time {
int hours,minutes;
double number,temp;
public Time(int x,int y){
hours= x;
minutes=y;
hours+=minutes/60;
minutes%= 60;
}
//Single parameter
public Time(double input){
number= input;
double temp ;
temp= (number%1*60*100)/100;
minutes= (int)temp;
hours= (int)number-(int)number%1;
}
public String toString(){
return String.format(hours+":"+minutes);
}
}
答案 0 :(得分:2)
你有一个实例变量:
double temp;
以及构造函数中的局部变量。
你应该只有一个,它必须是实例变量,因为你在主体中调用gamma.temp
,删除构造函数中的下面一行
另外,我建议您使用封装(见下文)来访问您班级之外的变量。
public Time(double input){
number= input;
//double temp ; This should be deleted
this.temp = (number%1*60*100)/100;
minutes= (int)temp;
hours= (int)number-(int)number%1;
}
答案 1 :(得分:0)
这对你有用:
从Time构造函数中删除临时变量声明,这就是每次都获得0.00的原因。
public class Test {
public static void main(String[]args){
Time object = new Time(20,329);
Time gamma = new Time(20.75);
System.out.println(object);
System.out.println(gamma);
System.out.println("temp:"+gamma.temp);
System.out.println("minutes:"+gamma.minutes);
System.out.println("number:"+gamma.number%1);
}
}
// Double parameter
class Time {
int hours,minutes;
double number,temp;
public Time(int x,int y){
hours= x;
minutes=y;
hours+=minutes/60;
minutes%= 60;
}
//Single parameter
public Time(double input){
number= input;
temp = (number%1*60*100)/100;
minutes= (int)temp;
hours= (int)number-(int)number%1;
}
public String toString(){
return String.format(hours+":"+minutes);
}
}