oisin097
oisin097

Reputation: 97

Java: Error with constructors and passing variables

I am trying to input a date in the format dd mm yyyy and have to return in the format e. g. Tuesday, 29th September. I'm new to Java and am not sure if my values from the day, month, year classes are being returned to the main. There is an error for the Date date1 = new Date(day1, month1, year1) saying it is undefined and to make it a constructor. If I make it a constructor and run the program I get values back like lab2.Day@659e0bfd. Not sure where to go from here.

package lab2;

public class Calendar {

//assume all months have 30 days and that 1 January is a Monday;

public static void main(String[] args) { // e.g. input: 29 09 2015

    int in1 = Integer.parseInt(args[0]);
    int in2 = Integer.parseInt(args[1]);
    int in3 = Integer.parseInt(args[2]);

    Day day1 = new Day(in1, in2); // string
    Month month1 = new Month(in2); // string
    Year year1 = new Year(in3); // integer


     Date date1 = new Date(day1, month1, year1); //

    date1.printName(); // e.g. "The date is Tuesday, 29th of September, 2015

}
}

package lab2;

public class Day {
private int day;
private int month;
private int code;
private String name; //e.g. Tuesday 

public Day(int dy, int mth ){
    day = dy;
    month = mth;
    code = ((day*month) % 7);


    // Assigning the day variable number to text //
    switch (code) {
    case 0: name = "Monday";
            break;
    case 1: name = "Tuesday";
            break;
    case 2: name = "Wednesday";
            break;
    case 3: name = "Thursday";
            break;
    case 4: name = "Friday";
            break;
    case 5: name = "Saturday";
            break;
    case 6: name = "Sunday";
            break;
    default: System.out.println("Incorrect Day Entered");}

    }

}

package lab2;

public class Month {

private int month1;
private String monthName;




public Month(int temp1){
    month1=temp1;


switch (month1) {
case 1: monthName = "January";
        break;
case 2: monthName = "February";
        break;
case 3: monthName = "March";
        break;
case 4: monthName = "April";
        break;
case 5: monthName = "May";
        break;
case 6: monthName = "June";
        break;
case 7: monthName = "July";
        break;
case 8: monthName = "August";
        break;
case 9: monthName = "September";
        break;
case 10: monthName = "October";
        break;
case 11: monthName = "November";
        break;
case 12: monthName = "December";
        break;
default: System.out.println("Incorrect Month Error");}


}

}

package lab2;

public class Year {

private int yearNumber;

public Year(int temp2)
{
    yearNumber=temp2;


}
}

package lab2;

public class Date {

private String day;
private String month;
private int year;



 public Date(String temp1, String temp2, int temp3){
    day = temp1;
    month = temp2;
    year = temp3; 
    }



public void printName() {
    System.out.println("The date is " +day+ ", " +month+ ", " +year);
}

} 

Upvotes: 0

Views: 95

Answers (2)

Rahul Chaurasia
Rahul Chaurasia

Reputation: 1641

There is an error for the "Date date1 = new Date(day1, month1, year1)" saying it is undefined and to make it a constructor. If I make it a constructor and run the program I get values back like "lab2.Day@659e0bfd". Not sure where to go from here.

You are getting lab2.Day@659e0bfd because you haven't implemented toString() method. Implement toString() method in your Day, Month and Year class and you'll get the desired result. Check the code below-

 public class Day {
    private int day;
    private int month;
    private int code;
    private String name; //e.g. Tuesday 

    public Day(int dy, int mth ){
        day = dy;
        month = mth;
        code = ((day*month) % 7);


        // Assigning the day variable number to text //
        switch (code) {
        case 0: name = "Monday";
                break;
        case 1: name = "Tuesday";
                break;
        case 2: name = "Wednesday";
                break;
        case 3: name = "Thursday";
                break;
        case 4: name = "Friday";
                break;
        case 5: name = "Saturday";
                break;
        case 6: name = "Sunday";
                break;
        default: System.out.println("Incorrect Day Entered");}

        }
        @Override
        public String toString() {
            return name;
        }

    }

Similary, you can put the toString() method in Month class

public class Month {

private int month1;
private String monthName;




public Month(int temp1){
    month1=temp1;


switch (month1) {
case 1: monthName = "January";
        break;
case 2: monthName = "February";
        break;
case 3: monthName = "March";
        break;
case 4: monthName = "April";
        break;
case 5: monthName = "May";
        break;
case 6: monthName = "June";
        break;
case 7: monthName = "July";
        break;
case 8: monthName = "August";
        break;
case 9: monthName = "September";
        break;
case 10: monthName = "October";
        break;
case 11: monthName = "November";
        break;
case 12: monthName = "December";
        break;
default: System.out.println("Incorrect Month Error");

        @Override
        public String toString() {
            return monthName;
        }

}

Your Year class -

public class Year {

private int yearNumber;

public Year(int temp2)
{
    yearNumber=temp2;


}

        @Override
        public String toString() {
            return yearNumber;
        }
}

Upvotes: 1

SatyaTNV
SatyaTNV

Reputation: 4135

There is an error for the "Date date1 = new Date(day1, month1, year1)" saying it is undefined and to make it a constructor.

Since there is no such parameterised constructor in Date class like Date(Day d, Month m, Year y). Its having constructor Date(String temp1, String temp2, int temp3). So parameter types are different.

Instead of

Date date1 = new Date(day1, month1, year1);

use

Date date1 = new Date(day1.name, month1.monthName, year1.yearNumber); 

Upvotes: 1

Related Questions