【问题标题】:Calculate a day based on user input: always the same day being returned根据用户输入计算一天:总是返回同一天
【发布时间】:2019-11-13 17:39:08
【问题描述】:

我正在尝试根据当前日期和用户输入的未来天数来计算日历上的星期几。因此,例如,今天是星期五,或者我的程序中的第 5 天。如果用户提前 15 天输入,我希望它打印那天是星期六(从今天起 15 天)。不幸的是,无论输入多少天,我都会将星期五作为当天的结果。有人可以帮忙吗?谢谢。

到目前为止的代码:

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);
  }
 }

【问题讨论】:

  • 我建议您查看 % 运算符,它会为您提供余数(所以 15 % 7 = 1),这可能比除以 7 更容易。
  • userEntryInt = sc.nextInt(); 代替userEntry = sc.next(); userEntryInt = Integer.parseInt(userEntry);

标签: java switch-statement


【解决方案1】:

您要做的是获取当前的星期几并将其更改为一个数字,然后将该数字添加到用户提供的数字中。然后除以 7 得到余数。

注意:

% 是余数运算符。 10%3=1, 5%3=2, 100%10=0。

例如:

星期几是星期一,因此天数为 1。用户输入 9,因此您将 1 和 9 相加得到 10。10 除以 7 的余数为 3,因此星期几为星期三。

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";
    }
}

【讨论】:

    【解决方案2】:

    使用哈希映射

    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 "";
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2016-11-15
      • 1970-01-01
      • 2015-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-08
      • 2022-01-04
      • 1970-01-01
      相关资源
      最近更新 更多