Home > Software design >  How to change values of a class instance with methods?
How to change values of a class instance with methods?

Time:11-23

I have a class named Time with attributes Hour, Min and Sec:

class Time {
  private int Hour;
  private int Min;
  private int Sec;
}

a constructor:

public Time(int h, int m, int s){
    Hour = h;
    Min = m;
    Sec = s;
}

and an instance time1 of the Time class:

Time time1 = new Time(12, 34, 52);

I wanted to create a method inside that will sum to the Hour attribute of time1 instance and return me the result in Time type, but when I try this it gives me the "Type mismatch: cannot convert from int to Time" error:

     public Time Add(int hrs){
     return Hour   hrs;
 }

what am I doing wrong here?

CodePudding user response:

You need to instanciate a new Time object

public Time Add(int hrs){
    return new Time(this.Hour   hrs, this.Min, this.Sec);
}

Also java naming convention, is lowerCamelCase for methods and attributs so hour, min, sec and add

CodePudding user response:

You seem to be looking for an instance method in Time class however, implementations may vary:

  • Mutate inner state of Time instance -- similar to a setter, returning reference to this
// mutate current instance:
class Time {
    public Time addHours(int hours) {
        this.Hours  = hours;
        return this;
    }
}

Usage:
Time time1 = new Time(12, 34, 52);
time1.addHours(2); // time1.Hour becomes 14
  • Immutable implementation -- create new instance of time using its Hour and hours
// mutate current instance:
class Time {
    public Time addHours(int hours) {
        return new Time(Hour   hours, Min, Sec);
    }
}

// Usage:
Time time1 = new Time(12, 34, 52);
Time time2 = time1.addHours(2); // time1.Hour remains 14

CodePudding user response:

In the method return type you put Time but you are returning Hour(Type=int) hrs(Type=int) which is their sum and it is also of type int. That's why you are getting the Type mismatch error

  •  Tags:  
  • java
  • Related