有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

我的代码运行得非常好,但我有点困惑,为什么它会为temp变量打印出0.00,而不是45.0000

我认为它是如何工作的:number=20.75,因此20.75万%1=0.75万*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) 个答案

  1. # 1 楼答案

    这将对你有用:

    从时间构造函数中删除临时变量声明,这就是为什么每次都得到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);
      }
    
    }
    
  2. # 2 楼答案

    您有一个实例变量:

    double temp;
    

    以及构造函数中的局部变量


    您应该只有一个实例变量,而且它必须是实例变量,因为您要在main中调用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;
    
    }
    

    有用的链接