2015-11-13 45 views
0

我想根据当前日期和用户输入将来的天数来计算,日历中的一周中的哪一天。例如,今天是星期五,也就是我的节目中的第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); 
    } 
} 
+0

我会建议看''%运营商,这将使你的余数(所以'15%7 = 1'),这可能是比7 – Gliderman

+0

而不是'userEntry = SC将更加容易。下一个(); userEntryInt = Integer.parseInt(userEntry); '只需使用'userEntryInt = sc.nextInt(); ' –

回答

0

你想要做的是把它目前是一周中的一天,它更改为一个号码,然后取这个数字,并将其添加到用户提供的号码。然后你除以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"; 
    } 
}