有没有一个简单的方程式可以用来代替这个方法?

Is there a simple equation I can replace this method with?

您将星期几作为整数输入 (sunday=0...saturday=6),它会输出距离最近的星期六的天数。

如果是星期六,它 returns 0 因为今天是星期六。如果是星期天,则为 returns -1,因为星期六过去了 1 天。如果是星期五,则为 returns 1,因为现在是未来 1 天。

   private int nightShiftTransform(int dayOfWeek)
    {
        switch (dayOfWeek)
        {
            case 0:
                return -1;
            case 1:
                return -2;
            case 2:
                return -3;
            case 3:
                return 3;
            case 4:
                return 2;
            case 5:
                return 1;
            case 6:
                return 0;
            default:
                throw new Exception("Invalid day of week");
        }
    }

我讨厌这个 switch 语句,但我想不出一个简单的方程式来代替它。

我假设您使用的是 C#。 一个简单的方法:

   private int nightShiftTransform(int dayOfWeek)
    {
        // ternary expression. You can do an if/else if you prefer
        int result = (dayOfWeek >= 3 ? 6 - dayOfWeek : -(dayOfWeek + 1));
        return result;
    }

一个简单的方法,如果 DayOfWeek 在 0 和 6 之间;

result = 6 - DayOfWeek - 7*(DayOfWeek < 3);

假设 C 中的规则(即 DayOfWeek < 3 形式的表达式如果为假则产生值 0,如果为真则产生值 1

equation 不是有用的标签。我会让语言明确。我不知道这是 Java 还是 C#。

如果这是 Java,我建议使用 Calendar 常量而不是整数。我认为它更具自我记录和可读性。

我无法改进 carndacier 漂亮的三元表达式:

package date;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 * NightShiftDemo
 * @author Michael
 * @link 
 * @since 11/4/2015 5:21 AM
 */
public class NightShiftDemo {

    public static void main(String[] args) {
        try {
            DateFormat formatter = new SimpleDateFormat("yyyy-MMM-dd");
            List<String> dates = Arrays.asList("2015-Nov-01", "2015-Nov-02", "2015-Nov-03", "2015-Nov-04", "2015-Nov-05", "2015-Nov-06", "2015-Nov-07");
            for (String date : dates) {
                System.out.println(String.format("date: %s shift: %d", date, nightShiftTransform(formatter.parse(date))));
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }

    public static int nightShiftTransform(int dayOfWeek) throws Exception
    {
        switch (dayOfWeek)
        {
            case 0:
                return -1;
            case 1:
                return -2;
            case 2:
                return -3;
            case 3:
                return 3;
            case 4:
                return 2;
            case 5:
                return 1;
            case 6:
                return 0;
            default:
                throw new Exception("Invalid day of week");
        }
    }

    public static int nightShiftTransform(Date date) {
        if (date == null) throw new IllegalArgumentException("date cannot be null");
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
        return ((dayOfWeek >= Calendar.WEDNESDAY) ? Calendar.SATURDAY - dayOfWeek : -dayOfWeek);
    }
}