简体   繁体   中英

Calculate a day based on user input: always the same day being returned

I am trying to calculate, based on the current day and the number of days in the future a user enters, what day of the week that falls on the calendar. So, for example, today is Friday, or day 5 in my program. If the user enters 15 days ahead, I want it to print that day is Saturday (15 days from today). Unfortunately, I'm getting Friday as the day result no matter how many days ahead are entered. Can someone please help with this? Thank you.

Code so far:

import java.util.*;
import java.text.SimpleDateFormat;

public class DayCalculator {

public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);

    int userEntryInt;
    String dayName;
    String userEntry;
    String weekdayName = new SimpleDateFormat
        ("EEEE", Locale.ENGLISH).format(System.currentTimeMillis());

    System.out.println("Today is "+weekdayName+".");
    System.out.println("Please enter how many days in the past or future "+
            "of which you'd like to know the day.");

    userEntry = sc.next(); 
    userEntryInt = Integer.parseInt(userEntry);
    dayName = getDayNumber(weekdayName, userEntryInt);   


    System.out.println("Your selected day is a " + dayName +".");   
}  

//method to calculate new day based on user entry
public static String getDayNumber(String name, int userNumber)    
   {

    String dayNumber = "TEST"; 
    int dayResult = 0;
    int dayNumberInt;

    switch (name){

    case "Monday":
     dayNumber = "1";
     break;
    case "Tuesday":   
     dayNumber = "2";
     break;
    case "Wednesday":
     dayNumber = "3";
     break;
    case "Thursday" : 
     dayNumber = "4";
     break;
    case "Friday":    
     dayNumber = "5";
     break;
    case "Saturday":  
     dayNumber = "6";
     break;
    case "Sunday":    
     dayNumber = "7";
    }

    System.out.println(dayNumber); //test
    dayNumberInt = Integer.parseInt(dayNumber);  
    System.out.println("dayNumberInt is "+dayNumberInt);//test

    System.out.println("dayResult is "+dayResult);//test

    if(((dayNumberInt+userNumber)/7)<7)
    {    
        dayResult = dayNumberInt+dayResult;   
    }
    else if (((dayNumberInt+userNumber)/7)>7)
    {

        dayResult = dayNumberInt-dayResult;
    }

    if (dayResult <0)
    {
       dayResult = -dayResult; 
    }

    if (dayResult==0)
    {
        dayResult = dayNumberInt;
    }
    String dayNameResult="";

    switch (dayResult){

    case 1: dayNameResult = "Monday";
            break;
    case 2: dayNameResult = "Tuedsay";
            break;
    case 3: dayNameResult = "Wednesday";
            break;
    case 4: dayNameResult = "Thursday";
            break;
    case 5: dayNameResult = "Friday";
            break;
    case 6: dayNameResult = "Saturday"; 
            break;
    case 7: dayNameResult = "Sunday"; 
           break;
    }

     return (dayNameResult);
  }
 }

What you want to do is take the day of the week it currently is and change it to a number then take that number and add it to the number that the user provided. Then you divide by 7 and find the remainder.

Note:

% is the remainder operator. 10%3=1, 5%3=2, 100%10=0.

For Example:

The day of the week is Monday so that days value would be 1. The user enters 9 so you add 1 and 9 together to get 10. The remainder of dividing 10 by 7 is 3 so the day of the week would be Wednesday.

public static getDayNumber(String name, int userNumber){
    if(userNumber<1)
        return "Invalid Number";
    int dayNumber = 0;
    switch(name){
        case "Monday":
            dayNumber = 1;
        break;
        case "Tuesday":   
            dayNumber = 2;
        break;
        case "Wednesday":
            dayNumber = 3;
        break;
        case "Thursday" : 
            dayNumber = 4;
        break;
        case "Friday":    
            dayNumber = 5;
        break;
        case "Saturday":  
            dayNumber = 6;
        break;
        case "Sunday":    
            dayNumber = 7;
    }
    dayNumber = (dayNumber + userNumber)%7;

    switch (dayNumber){
        case 1: return "Monday";
                break;
        case 2: return "Tuedsay";
                break;
        case 3: return "Wednesday";
                break;
        case 4: return "Thursday";
                break;
        case 5: return "Friday";
                break;
        case 6: return "Saturday"; 
                break;
        case 7: return "Sunday"; 
               break;
        default: return "Invalid Day Provided";
    }
}

using hashmap

import java.time.LocalDate;
import java.time.ZoneId;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;

public class Solution {

    public static void main(String[] args) {
         String resultDay=new Solution().solution("Sat",23);
         System.out.println(resultDay);

    }

    public String solution(String S, int K) {
        int day = getday(K);
        int cDay = listofdays.get(S);
        cDay = day + cDay;
        cDay = cDay % 7;
        return getDayOfWeek(cDay);
    }

    public static Map<String, Integer> listofdays;
    static {
        listofdays = new LinkedHashMap<>();
        listofdays.put("Sun", 1);
        listofdays.put("Mon", 2);
        listofdays.put("Tue", 3);
        listofdays.put("Wed", 4);
        listofdays.put("Thur", 5);
        listofdays.put("Fri", 6);
        listofdays.put("Sat", 7);
    }

    static int getday(int k) {
        return k % 7;
    }

    private String getDayOfWeek(int value) {
        for (Entry<String, Integer> entry : listofdays.entrySet()) {
            if (entry.getValue().equals(value)) {
                return entry.getKey();
            }
        }
        return "";
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM