为什么我的代码打印出0.00而不是45.000

时间:2015-11-21 08:58:20

标签: java

//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);
  }

}

2 个答案:

答案 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);
  }

}