How can I determine what day of the week a given month falls on in Java without using the Calendar Object?
up vote
-1
down vote
favorite
I'm creating a Calendar for my CS class and need to be able to get my calendar months to start on the correct day of the week. My first go at trying to solve this problem looked something like this:
public static int getStartingDay(int month) {
if (month == 1 || month == 10)
return (18 + 4) % 7;
else if (month == 2 || month == 3 || month == 11)
return ((18 + 4 + 3)) % 7;
else if (month == 4 || month == 7)
return ((18 + 4 + 6)) % 7;
else if (month == 9 || month == 12)
return ((18 + 4 + 5) % 7);
else if (month == 5)
return ((18 + 4 + 1) % 7);
else
return ((18 + 4 + 1) % 7);
I was really happy to see that this was working but when I showed this to my teacher he said it could be done in a much simpler way.
He responded:
"First of all, I want you to recall that I stated we are just concerned with 2018. Therefore, we only need to know what day 2018 started on. From there, we can basically do what we did for the second writing code question on the midterm, where given a day out of 365 for the year, we can determine what day of the week that falls on. This means that all we have left to do it determine what day out of 365 that a given month falls on. This can be done with some addition if we know how many days are in each month. We can just add up all of the previous month's days to get what day our month starts on. "
For the midterm, we were to assume that the year started on Wednesday (3rd day of the week) so my solution looked like this:
Method call : dayOfYear(5); Should return: 0 for Sunday
Public static final int FIRST_DAY_OF_YEAR = 3;
Public static int dayOfTheWeek(int day)
return (firstDay + day –1)%7;
Result: 0 (Sunday)
I'm a bit lost on how these two problems are connected. I know the key in my teacher's response was:
"This means that all we have left to do it determine what day out of 365 that a given month falls on." If you could help me understand how to solve this problem, you would be helping me tremendously!
I should also add, We are not allowed to use Java's Calendar object to get this working properly!
Here is my current Project:
import java.util.*;
public class CalendarReformed
// Here we can change the size of the calendar
public static final int FIRST_DAY_OF_MONTH = 1;
private static final int SIZE = 7;
public static void main(String args)
Scanner console = new Scanner(System.in);
int day = -1;
int month = -1;
String userSelection;
boolean flag = true;
while (flag)
userMenu();
userSelection = console.next();
if (userSelection.equalsIgnoreCase("e"))
System.out.print("Please enter a date:(mm/dd) ");
String date = console.next();
month = monthFromDate(date);
day = dayFromDate(date);
int highlightSelectedDay = day;
displayCalendar(month, highlightSelectedDay);
else if (userSelection.equalsIgnoreCase("t"))
Calendar c = Calendar.getInstance();
day = c.get(Calendar.DATE);
month = c.get(Calendar.MONTH)+1;
System.out.println("Today's date: " + month +"/"+ day);
displayCalendar(month,day);
else if (userSelection.equalsIgnoreCase("n"))
if (day != -1 && month != -1)
day = 1;
month = grabNextMonth(month);
displayCalendar(month,day);
else
System.out.print("You must have a month selected to go to next month!n");
else if(userSelection.equalsIgnoreCase("p"))
if (day != -1 && month != -1)
day = 1;
month = grabPreviousMonth(month);
displayCalendar(month, day);
else
System.out.print("You must first select a month for previous month to function!n");
else if(userSelection.equalsIgnoreCase("q"))
System.out.print("Now exiting the Calendar programn");
System.out.print("Have a nice day!");
flag = false;
else
System.out.print(" *USER ERROR DETECTED* n");
System.out.println("Please make a valid selection from the menu!");
// This method will print the month digit and centers it
public static void drawMonth(int month, int daysToSkip, int maxDays)
System.out.println();
int placeMonth = (SIZE * 3)-4;
for (int space = 1; space <= placeMonth; space++)
printSpaces(1);
String monthHolder;
if (month == 1)
monthHolder = "*January*";
else if(month == 2)
monthHolder = "*February*";
else if (month == 3)
monthHolder = "*March*";
else if (month == 4)
monthHolder = "*April*";
else if (month == 5)
monthHolder = "*May*";
else if (month == 6)
monthHolder = "*June*";
else if (month == 7)
monthHolder = "*July*";
else if (month == 8)
monthHolder = "*August*";
else if (month == 9)
monthHolder = "*September*";
else if (month == 10)
monthHolder = "*October*";
else if (month == 11)
monthHolder = "*November*";
else
monthHolder = "*December*";
System.out.println(monthHolder);
drawArt();
int start = 1;
while (start <= maxDays)
if (start == 1)
drawRow(start, maxDays, daysToSkip);
start += 7 - daysToSkip;
else
drawRow(start, maxDays, 0);
start += 7;
// Displays the top of the calendar border
for (int i = 1; i <= SIZE * 7; i++)
System.out.print("_");
// This method prints one row of our calendar and applies our
java calendar dayofweek
add a comment |
up vote
-1
down vote
favorite
I'm creating a Calendar for my CS class and need to be able to get my calendar months to start on the correct day of the week. My first go at trying to solve this problem looked something like this:
public static int getStartingDay(int month) {
if (month == 1 || month == 10)
return (18 + 4) % 7;
else if (month == 2 || month == 3 || month == 11)
return ((18 + 4 + 3)) % 7;
else if (month == 4 || month == 7)
return ((18 + 4 + 6)) % 7;
else if (month == 9 || month == 12)
return ((18 + 4 + 5) % 7);
else if (month == 5)
return ((18 + 4 + 1) % 7);
else
return ((18 + 4 + 1) % 7);
I was really happy to see that this was working but when I showed this to my teacher he said it could be done in a much simpler way.
He responded:
"First of all, I want you to recall that I stated we are just concerned with 2018. Therefore, we only need to know what day 2018 started on. From there, we can basically do what we did for the second writing code question on the midterm, where given a day out of 365 for the year, we can determine what day of the week that falls on. This means that all we have left to do it determine what day out of 365 that a given month falls on. This can be done with some addition if we know how many days are in each month. We can just add up all of the previous month's days to get what day our month starts on. "
For the midterm, we were to assume that the year started on Wednesday (3rd day of the week) so my solution looked like this:
Method call : dayOfYear(5); Should return: 0 for Sunday
Public static final int FIRST_DAY_OF_YEAR = 3;
Public static int dayOfTheWeek(int day)
return (firstDay + day –1)%7;
Result: 0 (Sunday)
I'm a bit lost on how these two problems are connected. I know the key in my teacher's response was:
"This means that all we have left to do it determine what day out of 365 that a given month falls on." If you could help me understand how to solve this problem, you would be helping me tremendously!
I should also add, We are not allowed to use Java's Calendar object to get this working properly!
Here is my current Project:
import java.util.*;
public class CalendarReformed
// Here we can change the size of the calendar
public static final int FIRST_DAY_OF_MONTH = 1;
private static final int SIZE = 7;
public static void main(String args)
Scanner console = new Scanner(System.in);
int day = -1;
int month = -1;
String userSelection;
boolean flag = true;
while (flag)
userMenu();
userSelection = console.next();
if (userSelection.equalsIgnoreCase("e"))
System.out.print("Please enter a date:(mm/dd) ");
String date = console.next();
month = monthFromDate(date);
day = dayFromDate(date);
int highlightSelectedDay = day;
displayCalendar(month, highlightSelectedDay);
else if (userSelection.equalsIgnoreCase("t"))
Calendar c = Calendar.getInstance();
day = c.get(Calendar.DATE);
month = c.get(Calendar.MONTH)+1;
System.out.println("Today's date: " + month +"/"+ day);
displayCalendar(month,day);
else if (userSelection.equalsIgnoreCase("n"))
if (day != -1 && month != -1)
day = 1;
month = grabNextMonth(month);
displayCalendar(month,day);
else
System.out.print("You must have a month selected to go to next month!n");
else if(userSelection.equalsIgnoreCase("p"))
if (day != -1 && month != -1)
day = 1;
month = grabPreviousMonth(month);
displayCalendar(month, day);
else
System.out.print("You must first select a month for previous month to function!n");
else if(userSelection.equalsIgnoreCase("q"))
System.out.print("Now exiting the Calendar programn");
System.out.print("Have a nice day!");
flag = false;
else
System.out.print(" *USER ERROR DETECTED* n");
System.out.println("Please make a valid selection from the menu!");
// This method will print the month digit and centers it
public static void drawMonth(int month, int daysToSkip, int maxDays)
System.out.println();
int placeMonth = (SIZE * 3)-4;
for (int space = 1; space <= placeMonth; space++)
printSpaces(1);
String monthHolder;
if (month == 1)
monthHolder = "*January*";
else if(month == 2)
monthHolder = "*February*";
else if (month == 3)
monthHolder = "*March*";
else if (month == 4)
monthHolder = "*April*";
else if (month == 5)
monthHolder = "*May*";
else if (month == 6)
monthHolder = "*June*";
else if (month == 7)
monthHolder = "*July*";
else if (month == 8)
monthHolder = "*August*";
else if (month == 9)
monthHolder = "*September*";
else if (month == 10)
monthHolder = "*October*";
else if (month == 11)
monthHolder = "*November*";
else
monthHolder = "*December*";
System.out.println(monthHolder);
drawArt();
int start = 1;
while (start <= maxDays)
if (start == 1)
drawRow(start, maxDays, daysToSkip);
start += 7 - daysToSkip;
else
drawRow(start, maxDays, 0);
start += 7;
// Displays the top of the calendar border
for (int i = 1; i <= SIZE * 7; i++)
System.out.print("_");
// This method prints one row of our calendar and applies our
java calendar dayofweek
Putting aside whether the teacher's approach may be simpler, I am frankly mystified by the magic numbers in your answer. What is the significance of 18? 4? Why do the checks test those specific months? (I'm not actually looking for an answer; I'm encouraging you to think about how you would understand this code if you revisited it a year from now, or if this code were to be handed to someone else to maintain).
– Andy Turner
Nov 10 at 21:17
Thank you. I have really been struggling with this part of the project and was looking everywhere I could for a solution and wound up using a formula I found to calculate the correct days. I guess I was just so happy to see it working that I didn't think about how it was structured.
– Nicksc831
Nov 10 at 21:25
Focus on working with concepts you think might be useful rather than finding the "right formula" (or magic numbers). WouldnumberOfDaysInPreceedingMonths += daysIn2018Months[m];
express a concept that is part of the way you think? Programming is a form of expository writing (but often with the supporting details first if they can be expressed simply ex.int daysIn2018Months = 31, 28, …
).
– Tom Blodget
Nov 11 at 2:38
It’s a question with a bit of thought-reading in it, something that very few stackoverflowers excel in. If I’m allowed to try anyway, I would guess that you rteacher means that to find the day of week of March 1, you add the number of days in January and the number of days in February to the first day of the year. Similarly for other months.
– Ole V.V.
Nov 11 at 6:33
For production code you should never useCalendar
, it’s poorly designed and long outdated. Instead for a task like this you would useLocalDate
fromjava.time
, the modern Java date and time API. For exampleLocalDate.of(2018, Month.MARCH, 9).getDayOfWeek()
.
– Ole V.V.
Nov 11 at 6:35
add a comment |
up vote
-1
down vote
favorite
up vote
-1
down vote
favorite
I'm creating a Calendar for my CS class and need to be able to get my calendar months to start on the correct day of the week. My first go at trying to solve this problem looked something like this:
public static int getStartingDay(int month) {
if (month == 1 || month == 10)
return (18 + 4) % 7;
else if (month == 2 || month == 3 || month == 11)
return ((18 + 4 + 3)) % 7;
else if (month == 4 || month == 7)
return ((18 + 4 + 6)) % 7;
else if (month == 9 || month == 12)
return ((18 + 4 + 5) % 7);
else if (month == 5)
return ((18 + 4 + 1) % 7);
else
return ((18 + 4 + 1) % 7);
I was really happy to see that this was working but when I showed this to my teacher he said it could be done in a much simpler way.
He responded:
"First of all, I want you to recall that I stated we are just concerned with 2018. Therefore, we only need to know what day 2018 started on. From there, we can basically do what we did for the second writing code question on the midterm, where given a day out of 365 for the year, we can determine what day of the week that falls on. This means that all we have left to do it determine what day out of 365 that a given month falls on. This can be done with some addition if we know how many days are in each month. We can just add up all of the previous month's days to get what day our month starts on. "
For the midterm, we were to assume that the year started on Wednesday (3rd day of the week) so my solution looked like this:
Method call : dayOfYear(5); Should return: 0 for Sunday
Public static final int FIRST_DAY_OF_YEAR = 3;
Public static int dayOfTheWeek(int day)
return (firstDay + day –1)%7;
Result: 0 (Sunday)
I'm a bit lost on how these two problems are connected. I know the key in my teacher's response was:
"This means that all we have left to do it determine what day out of 365 that a given month falls on." If you could help me understand how to solve this problem, you would be helping me tremendously!
I should also add, We are not allowed to use Java's Calendar object to get this working properly!
Here is my current Project:
import java.util.*;
public class CalendarReformed
// Here we can change the size of the calendar
public static final int FIRST_DAY_OF_MONTH = 1;
private static final int SIZE = 7;
public static void main(String args)
Scanner console = new Scanner(System.in);
int day = -1;
int month = -1;
String userSelection;
boolean flag = true;
while (flag)
userMenu();
userSelection = console.next();
if (userSelection.equalsIgnoreCase("e"))
System.out.print("Please enter a date:(mm/dd) ");
String date = console.next();
month = monthFromDate(date);
day = dayFromDate(date);
int highlightSelectedDay = day;
displayCalendar(month, highlightSelectedDay);
else if (userSelection.equalsIgnoreCase("t"))
Calendar c = Calendar.getInstance();
day = c.get(Calendar.DATE);
month = c.get(Calendar.MONTH)+1;
System.out.println("Today's date: " + month +"/"+ day);
displayCalendar(month,day);
else if (userSelection.equalsIgnoreCase("n"))
if (day != -1 && month != -1)
day = 1;
month = grabNextMonth(month);
displayCalendar(month,day);
else
System.out.print("You must have a month selected to go to next month!n");
else if(userSelection.equalsIgnoreCase("p"))
if (day != -1 && month != -1)
day = 1;
month = grabPreviousMonth(month);
displayCalendar(month, day);
else
System.out.print("You must first select a month for previous month to function!n");
else if(userSelection.equalsIgnoreCase("q"))
System.out.print("Now exiting the Calendar programn");
System.out.print("Have a nice day!");
flag = false;
else
System.out.print(" *USER ERROR DETECTED* n");
System.out.println("Please make a valid selection from the menu!");
// This method will print the month digit and centers it
public static void drawMonth(int month, int daysToSkip, int maxDays)
System.out.println();
int placeMonth = (SIZE * 3)-4;
for (int space = 1; space <= placeMonth; space++)
printSpaces(1);
String monthHolder;
if (month == 1)
monthHolder = "*January*";
else if(month == 2)
monthHolder = "*February*";
else if (month == 3)
monthHolder = "*March*";
else if (month == 4)
monthHolder = "*April*";
else if (month == 5)
monthHolder = "*May*";
else if (month == 6)
monthHolder = "*June*";
else if (month == 7)
monthHolder = "*July*";
else if (month == 8)
monthHolder = "*August*";
else if (month == 9)
monthHolder = "*September*";
else if (month == 10)
monthHolder = "*October*";
else if (month == 11)
monthHolder = "*November*";
else
monthHolder = "*December*";
System.out.println(monthHolder);
drawArt();
int start = 1;
while (start <= maxDays)
if (start == 1)
drawRow(start, maxDays, daysToSkip);
start += 7 - daysToSkip;
else
drawRow(start, maxDays, 0);
start += 7;
// Displays the top of the calendar border
for (int i = 1; i <= SIZE * 7; i++)
System.out.print("_");
// This method prints one row of our calendar and applies our
java calendar dayofweek
I'm creating a Calendar for my CS class and need to be able to get my calendar months to start on the correct day of the week. My first go at trying to solve this problem looked something like this:
public static int getStartingDay(int month) {
if (month == 1 || month == 10)
return (18 + 4) % 7;
else if (month == 2 || month == 3 || month == 11)
return ((18 + 4 + 3)) % 7;
else if (month == 4 || month == 7)
return ((18 + 4 + 6)) % 7;
else if (month == 9 || month == 12)
return ((18 + 4 + 5) % 7);
else if (month == 5)
return ((18 + 4 + 1) % 7);
else
return ((18 + 4 + 1) % 7);
I was really happy to see that this was working but when I showed this to my teacher he said it could be done in a much simpler way.
He responded:
"First of all, I want you to recall that I stated we are just concerned with 2018. Therefore, we only need to know what day 2018 started on. From there, we can basically do what we did for the second writing code question on the midterm, where given a day out of 365 for the year, we can determine what day of the week that falls on. This means that all we have left to do it determine what day out of 365 that a given month falls on. This can be done with some addition if we know how many days are in each month. We can just add up all of the previous month's days to get what day our month starts on. "
For the midterm, we were to assume that the year started on Wednesday (3rd day of the week) so my solution looked like this:
Method call : dayOfYear(5); Should return: 0 for Sunday
Public static final int FIRST_DAY_OF_YEAR = 3;
Public static int dayOfTheWeek(int day)
return (firstDay + day –1)%7;
Result: 0 (Sunday)
I'm a bit lost on how these two problems are connected. I know the key in my teacher's response was:
"This means that all we have left to do it determine what day out of 365 that a given month falls on." If you could help me understand how to solve this problem, you would be helping me tremendously!
I should also add, We are not allowed to use Java's Calendar object to get this working properly!
Here is my current Project:
import java.util.*;
public class CalendarReformed
// Here we can change the size of the calendar
public static final int FIRST_DAY_OF_MONTH = 1;
private static final int SIZE = 7;
public static void main(String args)
Scanner console = new Scanner(System.in);
int day = -1;
int month = -1;
String userSelection;
boolean flag = true;
while (flag)
userMenu();
userSelection = console.next();
if (userSelection.equalsIgnoreCase("e"))
System.out.print("Please enter a date:(mm/dd) ");
String date = console.next();
month = monthFromDate(date);
day = dayFromDate(date);
int highlightSelectedDay = day;
displayCalendar(month, highlightSelectedDay);
else if (userSelection.equalsIgnoreCase("t"))
Calendar c = Calendar.getInstance();
day = c.get(Calendar.DATE);
month = c.get(Calendar.MONTH)+1;
System.out.println("Today's date: " + month +"/"+ day);
displayCalendar(month,day);
else if (userSelection.equalsIgnoreCase("n"))
if (day != -1 && month != -1)
day = 1;
month = grabNextMonth(month);
displayCalendar(month,day);
else
System.out.print("You must have a month selected to go to next month!n");
else if(userSelection.equalsIgnoreCase("p"))
if (day != -1 && month != -1)
day = 1;
month = grabPreviousMonth(month);
displayCalendar(month, day);
else
System.out.print("You must first select a month for previous month to function!n");
else if(userSelection.equalsIgnoreCase("q"))
System.out.print("Now exiting the Calendar programn");
System.out.print("Have a nice day!");
flag = false;
else
System.out.print(" *USER ERROR DETECTED* n");
System.out.println("Please make a valid selection from the menu!");
// This method will print the month digit and centers it
public static void drawMonth(int month, int daysToSkip, int maxDays)
System.out.println();
int placeMonth = (SIZE * 3)-4;
for (int space = 1; space <= placeMonth; space++)
printSpaces(1);
String monthHolder;
if (month == 1)
monthHolder = "*January*";
else if(month == 2)
monthHolder = "*February*";
else if (month == 3)
monthHolder = "*March*";
else if (month == 4)
monthHolder = "*April*";
else if (month == 5)
monthHolder = "*May*";
else if (month == 6)
monthHolder = "*June*";
else if (month == 7)
monthHolder = "*July*";
else if (month == 8)
monthHolder = "*August*";
else if (month == 9)
monthHolder = "*September*";
else if (month == 10)
monthHolder = "*October*";
else if (month == 11)
monthHolder = "*November*";
else
monthHolder = "*December*";
System.out.println(monthHolder);
drawArt();
int start = 1;
while (start <= maxDays)
if (start == 1)
drawRow(start, maxDays, daysToSkip);
start += 7 - daysToSkip;
else
drawRow(start, maxDays, 0);
start += 7;
// Displays the top of the calendar border
for (int i = 1; i <= SIZE * 7; i++)
System.out.print("_");
// This method prints one row of our calendar and applies our
java calendar dayofweek
java calendar dayofweek
edited Nov 11 at 6:36
Ole V.V.
25.4k62449
25.4k62449
asked Nov 10 at 21:07
Nicksc831
12
12
Putting aside whether the teacher's approach may be simpler, I am frankly mystified by the magic numbers in your answer. What is the significance of 18? 4? Why do the checks test those specific months? (I'm not actually looking for an answer; I'm encouraging you to think about how you would understand this code if you revisited it a year from now, or if this code were to be handed to someone else to maintain).
– Andy Turner
Nov 10 at 21:17
Thank you. I have really been struggling with this part of the project and was looking everywhere I could for a solution and wound up using a formula I found to calculate the correct days. I guess I was just so happy to see it working that I didn't think about how it was structured.
– Nicksc831
Nov 10 at 21:25
Focus on working with concepts you think might be useful rather than finding the "right formula" (or magic numbers). WouldnumberOfDaysInPreceedingMonths += daysIn2018Months[m];
express a concept that is part of the way you think? Programming is a form of expository writing (but often with the supporting details first if they can be expressed simply ex.int daysIn2018Months = 31, 28, …
).
– Tom Blodget
Nov 11 at 2:38
It’s a question with a bit of thought-reading in it, something that very few stackoverflowers excel in. If I’m allowed to try anyway, I would guess that you rteacher means that to find the day of week of March 1, you add the number of days in January and the number of days in February to the first day of the year. Similarly for other months.
– Ole V.V.
Nov 11 at 6:33
For production code you should never useCalendar
, it’s poorly designed and long outdated. Instead for a task like this you would useLocalDate
fromjava.time
, the modern Java date and time API. For exampleLocalDate.of(2018, Month.MARCH, 9).getDayOfWeek()
.
– Ole V.V.
Nov 11 at 6:35
add a comment |
Putting aside whether the teacher's approach may be simpler, I am frankly mystified by the magic numbers in your answer. What is the significance of 18? 4? Why do the checks test those specific months? (I'm not actually looking for an answer; I'm encouraging you to think about how you would understand this code if you revisited it a year from now, or if this code were to be handed to someone else to maintain).
– Andy Turner
Nov 10 at 21:17
Thank you. I have really been struggling with this part of the project and was looking everywhere I could for a solution and wound up using a formula I found to calculate the correct days. I guess I was just so happy to see it working that I didn't think about how it was structured.
– Nicksc831
Nov 10 at 21:25
Focus on working with concepts you think might be useful rather than finding the "right formula" (or magic numbers). WouldnumberOfDaysInPreceedingMonths += daysIn2018Months[m];
express a concept that is part of the way you think? Programming is a form of expository writing (but often with the supporting details first if they can be expressed simply ex.int daysIn2018Months = 31, 28, …
).
– Tom Blodget
Nov 11 at 2:38
It’s a question with a bit of thought-reading in it, something that very few stackoverflowers excel in. If I’m allowed to try anyway, I would guess that you rteacher means that to find the day of week of March 1, you add the number of days in January and the number of days in February to the first day of the year. Similarly for other months.
– Ole V.V.
Nov 11 at 6:33
For production code you should never useCalendar
, it’s poorly designed and long outdated. Instead for a task like this you would useLocalDate
fromjava.time
, the modern Java date and time API. For exampleLocalDate.of(2018, Month.MARCH, 9).getDayOfWeek()
.
– Ole V.V.
Nov 11 at 6:35
Putting aside whether the teacher's approach may be simpler, I am frankly mystified by the magic numbers in your answer. What is the significance of 18? 4? Why do the checks test those specific months? (I'm not actually looking for an answer; I'm encouraging you to think about how you would understand this code if you revisited it a year from now, or if this code were to be handed to someone else to maintain).
– Andy Turner
Nov 10 at 21:17
Putting aside whether the teacher's approach may be simpler, I am frankly mystified by the magic numbers in your answer. What is the significance of 18? 4? Why do the checks test those specific months? (I'm not actually looking for an answer; I'm encouraging you to think about how you would understand this code if you revisited it a year from now, or if this code were to be handed to someone else to maintain).
– Andy Turner
Nov 10 at 21:17
Thank you. I have really been struggling with this part of the project and was looking everywhere I could for a solution and wound up using a formula I found to calculate the correct days. I guess I was just so happy to see it working that I didn't think about how it was structured.
– Nicksc831
Nov 10 at 21:25
Thank you. I have really been struggling with this part of the project and was looking everywhere I could for a solution and wound up using a formula I found to calculate the correct days. I guess I was just so happy to see it working that I didn't think about how it was structured.
– Nicksc831
Nov 10 at 21:25
Focus on working with concepts you think might be useful rather than finding the "right formula" (or magic numbers). Would
numberOfDaysInPreceedingMonths += daysIn2018Months[m];
express a concept that is part of the way you think? Programming is a form of expository writing (but often with the supporting details first if they can be expressed simply ex. int daysIn2018Months = 31, 28, …
).– Tom Blodget
Nov 11 at 2:38
Focus on working with concepts you think might be useful rather than finding the "right formula" (or magic numbers). Would
numberOfDaysInPreceedingMonths += daysIn2018Months[m];
express a concept that is part of the way you think? Programming is a form of expository writing (but often with the supporting details first if they can be expressed simply ex. int daysIn2018Months = 31, 28, …
).– Tom Blodget
Nov 11 at 2:38
It’s a question with a bit of thought-reading in it, something that very few stackoverflowers excel in. If I’m allowed to try anyway, I would guess that you rteacher means that to find the day of week of March 1, you add the number of days in January and the number of days in February to the first day of the year. Similarly for other months.
– Ole V.V.
Nov 11 at 6:33
It’s a question with a bit of thought-reading in it, something that very few stackoverflowers excel in. If I’m allowed to try anyway, I would guess that you rteacher means that to find the day of week of March 1, you add the number of days in January and the number of days in February to the first day of the year. Similarly for other months.
– Ole V.V.
Nov 11 at 6:33
For production code you should never use
Calendar
, it’s poorly designed and long outdated. Instead for a task like this you would use LocalDate
from java.time
, the modern Java date and time API. For example LocalDate.of(2018, Month.MARCH, 9).getDayOfWeek()
.– Ole V.V.
Nov 11 at 6:35
For production code you should never use
Calendar
, it’s poorly designed and long outdated. Instead for a task like this you would use LocalDate
from java.time
, the modern Java date and time API. For example LocalDate.of(2018, Month.MARCH, 9).getDayOfWeek()
.– Ole V.V.
Nov 11 at 6:35
add a comment |
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53243416%2fhow-can-i-determine-what-day-of-the-week-a-given-month-falls-on-in-java-without%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Putting aside whether the teacher's approach may be simpler, I am frankly mystified by the magic numbers in your answer. What is the significance of 18? 4? Why do the checks test those specific months? (I'm not actually looking for an answer; I'm encouraging you to think about how you would understand this code if you revisited it a year from now, or if this code were to be handed to someone else to maintain).
– Andy Turner
Nov 10 at 21:17
Thank you. I have really been struggling with this part of the project and was looking everywhere I could for a solution and wound up using a formula I found to calculate the correct days. I guess I was just so happy to see it working that I didn't think about how it was structured.
– Nicksc831
Nov 10 at 21:25
Focus on working with concepts you think might be useful rather than finding the "right formula" (or magic numbers). Would
numberOfDaysInPreceedingMonths += daysIn2018Months[m];
express a concept that is part of the way you think? Programming is a form of expository writing (but often with the supporting details first if they can be expressed simply ex.int daysIn2018Months = 31, 28, …
).– Tom Blodget
Nov 11 at 2:38
It’s a question with a bit of thought-reading in it, something that very few stackoverflowers excel in. If I’m allowed to try anyway, I would guess that you rteacher means that to find the day of week of March 1, you add the number of days in January and the number of days in February to the first day of the year. Similarly for other months.
– Ole V.V.
Nov 11 at 6:33
For production code you should never use
Calendar
, it’s poorly designed and long outdated. Instead for a task like this you would useLocalDate
fromjava.time
, the modern Java date and time API. For exampleLocalDate.of(2018, Month.MARCH, 9).getDayOfWeek()
.– Ole V.V.
Nov 11 at 6:35