Reputation: 21
So this is my first time posting here so hopefully you guys will be able to help me, anyways here's my code:
System.out.println("Would you like to run? (enter y to run): ");
Scanner scan = new Scanner(System.in);
char response = scan.next().charAt(0);
if(response == 'y' || response == 'Y'){
MyCalendar test1 = new MyCalendar();
System.out.println("Enter year, month, and day, separated by space: ");
int year = scan.nextInt();
int month = scan.nextInt();
int day = scan.nextInt();
if(MyCalendar.isValidDate(year,month, day)){
System.out.println("The above date is a valid date.");
System.out.println("Day of that day in its week: "+ MyCalendar.dayOfWeek);
System.out.println("Day of the date in its year: "+ MyCalendar.dayOfYear);
return;
}
else{
System.out.println("The above date is not valid.");
return;
}
}
}
}
On the line where I put MyCalendar.dayOfWeek and MyCalendar.dayOfYear it says it cannot find the variable, it's in another class.
How would I properly reference this method?
MyCalendar class:
/**
* Check for validity of a date
*
* @param year int (>= 1900 and <= 2100)
* @param month int
* @param day int
* @return booolean true if valid date; false, otherwise
*/
public static boolean isValidDate(int year, int month, int day){
return(year > 1900 && year <= 2100 && month > 0 && month < 13 && day > 0
&& day < 32);
}
/**
* Check for leap year
*
* @param year int (>= 1900 and <= 2100)
* @return boolean true if leap year; false, otherwise
*/
private boolean isLeapYear(int year){
return(year % 4 == 0 && year % 100 !=0 || year % 400 == 0);
}
/**
* Compute the number of days in a valid month of a valid year
*
* @param year int (>= 1900 and <= 2100)
* @param month int (range 1-12)
* @return int the number of days in the given month of the year
*/
private int numDays(int year, int month, int day){
int daysInMonth = 0;
switch (month){
case 1: daysInMonth = 31; break;
case 2: if(isLeapYear(year))
daysInMonth = 29;
else
daysInMonth = 28;
break;
case 3: daysInMonth = 31; break;
case 4: daysInMonth = 30; break;
case 5: daysInMonth = 31; break;
case 6: daysInMonth = 30; break;
case 7: daysInMonth = 31; break;
case 8: daysInMonth = 31; break;
case 9: daysInMonth = 30; break;
case 10: daysInMonth = 31; break;
case 11: daysInMonth = 30; break;
case 12: daysInMonth = 31; break;
}
return daysInMonth;
}
/**
* Compute the day of the year for a valid date
*
* @param year int (>= 1900 and <= 2100)
* @param month int (range 1-12)
* @param day int (range 1-numDays(year, month))
* @return int the day of the year
*/
public int dayOfYear(int year,int month,int day){
int dayOfYear = day;
if(isLeapYear(year)){
switch (month){
case 1:
dayOfYear = day; break;
case 2:
dayOfYear += 31; break;
case 3:
dayOfYear += 60; break;
case 4:
dayOfYear += 91; break;
case 5:
dayOfYear += 121; break;
case 6:
dayOfYear += 152; break;
case 7:
dayOfYear += 182; break;
case 8:
dayOfYear += 213; break;
case 9:
dayOfYear += 244; break;
case 10:
dayOfYear += 274; break;
case 11:
dayOfYear += 305; break;
case 12:
dayOfYear += 335; break;
}}
else{
switch (month){
case 1:
dayOfYear = day; break;
case 2:
dayOfYear += 31; break;
case 3:
dayOfYear += 59; break;
case 4:
dayOfYear += 90; break;
case 5:
dayOfYear += 120; break;
case 6:
dayOfYear += 151; break;
case 7:
dayOfYear += 181; break;
case 8:
dayOfYear += 212; break;
case 9:
dayOfYear += 243; break;
case 10:
dayOfYear += 273; break;
case 11:
dayOfYear += 304; break;
case 12:
dayOfYear += 334; break;
}}
return dayOfYear;
}
/**
* Compute the day of the week for a valid date
*
* @param year int (>= 1900 and <= 2100)
* @param month int (range 1-12)
* @param day int (range 1-numDays(year, month))
* @return String the day of the week
*/
public String dayOfWeek(int year, int month, int day, String t){
int m=month;
int y=year;
int d=day;
if (month > 3){
m += 12;
y -= 1;
}
int y0 = y - (14 - m) / 12;
int x = y0 + y0/4 - y0/100 + y0/400;
int m0 = m + 12 * ((14 - m) / 12) - 2;
int dayOfWeek = (d + x + (31*m0)/12) % 7;
switch (dayOfWeek) {
case 0:
t = "Sunday";
case 1:
t = "Monday";
case 2:
t = "Tuesday";
case 3:
t = "Wednesday";
case 4:
t = "Thursday";
case 5:
t = "Friday";
case 6:
t = "Saturday";
}
return t;
}
}
Edit: Excuse me for the sloppy code, I'm taking a beginners computer science class. Thank you all for the responses!
Upvotes: 1
Views: 237
Reputation: 1734
I don't know how your MyCalender class looks like but I am pretty sure you don't have a static variable dayOfWeek in it. You probably need to use an object of that class.
System.out.println("Day of that day in its week: "+ test1.dayOfWeek(year, month, day));
System.out.println("Day of the date in its year: "+ test1.dayOfYear(year, month, day));
Upvotes: 1
Reputation: 131
If it's a method then you should write MyCalendar.dayOfWeek() and MyCalendar.dayOfYear(), shouldn't you? If they are variables then check if they are public in MyCalendar.
Edit: Also you probably want to do something like test1.dayOfWeek() since you created instance of MyCalendar. As someone wrote in a comment, it would be better if you showed us MyCalendar class as well.
Upvotes: 1