-1

I have this code which is built to find day of the week when user enters date but currently it's not working as expected. Also, I need to help with setting up loop to ask question again and again until user press "Control + Z" to exit. Can anyone check and point me out issues. Also help with loop.

import java.util.Calendar;
import java.util.Scanner;

public class CalendarProject {

@SuppressWarnings({ "resource" })
public static void main(String[] args) {    
    Calendar c = Calendar.getInstance(); 
    Scanner input = new Scanner (System.in);

    //Enter the Day
    System.out.println("Enter the day in number:");
    int day1= input.nextInt( );

    //Enter the Month
    System.out.println("Enter the Month in number");
    int month= input.nextInt( );

    //Enter the Year
    System.out.println("Enter the Year in number format");
    int year= input.nextInt( );


    //Display the day
    int dayOfWeek = c.get(Calendar.DAY_OF_WEEK);


    System.out.println(String.format("%d/%d/%d",day1,month,year));
    System.out.println(c.get(Calendar.DAY_OF_WEEK));


    if (dayOfWeek == Calendar.SUNDAY) {
        System.out.println("Sunday");
    }
    else if (dayOfWeek == Calendar.MONDAY) {
        System.out.println("Monday");
    }
    else if (dayOfWeek == Calendar.TUESDAY) {
            System.out.println("Tuesday");
    }
    else if (dayOfWeek == Calendar.WEDNESDAY) {
                System.out.println("Wednesday");
    }
    else if (dayOfWeek == Calendar.THURSDAY) {
        System.out.println("Thursday");
    }
    else if (dayOfWeek == Calendar.FRIDAY) {
        System.out.println("Friday");
    }
    else if (dayOfWeek == Calendar.SATURDAY) {
        System.out.println("Saturday");

   }
}
}
Desi4u
  • 45
  • 8
  • `Calendar` is only changed at `Calendar c = Calendar.getInstance();` – Scary Wombat Jan 26 '17 at 05:57
  • FYI, the troublesome old date-time classes such as [`java.util.Date`](https://docs.oracle.com/javase/8/docs/api/java/util/Date.html), [`java.util.Calendar`](https://docs.oracle.com/javase/8/docs/api/java/util/Date.html), and `java.text.SimpleTextFormat` are now [legacy](https://en.wikipedia.org/wiki/Legacy_system), supplanted by the [java.time](https://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html) classes. – Basil Bourque Jan 26 '17 at 09:02

1 Answers1

1

1.You never set the input date in Calender object,hence it will never work as desired. So you need to use c.setTime(date); Here date is Date object.
2. For loop, you can use do while loop to ask user again and again.
Following is your modified code

public static void main(String[] args) {    
    Calendar c; 
    SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
    Scanner input = new Scanner (System.in);
    try {
        do{
            System.out.println("Enter the day in number:");
            int day1= input.nextInt();

            //Enter the Month
            System.out.println("Enter the Month in number");
            int month= input.nextInt( );

            //Enter the Year
            System.out.println("Enter the Year in number format");
            int year= input.nextInt( );
            Date date = formatter.parse((String.format("%d/%d/%d",day1,month,year)));
            System.out.println(date);
            c= Calendar.getInstance();
            c.setTime(date);
            int day =  c.get(Calendar.DAY_OF_WEEK);
            if (day == Calendar.SUNDAY) {
                System.out.println("Sunday");
            }
            else if (day == Calendar.MONDAY) {
                System.out.println("Monday");
            }
            else if (day == Calendar.TUESDAY) {
                    System.out.println("Tuesday");
            }
            else if (day == Calendar.WEDNESDAY) {
                        System.out.println("Wednesday");
            }
            else if (day == Calendar.THURSDAY) {
                System.out.println("Thursday");
            }
            else if (day == Calendar.FRIDAY) {
                System.out.println("Friday");
            }
            else if (day == Calendar.SATURDAY) {
                System.out.println("Saturday");
            }
            System.out.println("To exit press CTRL+Z(Windows) or CTRL+D(LINUX), or any key to continue");
            input.nextLine();
        }while (input.hasNextLine());

    }catch(NoSuchElementException n){
        System.out.println("NoSuchElementException");
    }catch(ParseException pe){
        System.out.println("invalid date");
    }finally {
        input.close();
        System.out.println("exiting");
    }   
}

3. If you are using Java 8, you can get rid of all if else blocks by using java.time.DayOfWeek Enum. Just replace all your if else by following lines

DayOfWeek dayOfWeek = DayOfWeek.of((day+6)%7==0?7:(day+6)%7);
System.out.println(dayOfWeek);

I used ternary operator because DayOfWeek takes MONDAY as value of index 1 and Calender.DAY_OF_WEEk takes SUNDAY as value of index 1

prateek tomar
  • 362
  • 1
  • 12