有一个简单的等式我可以用这个方法替换吗?

时间:2015-11-04 10:16:27

标签: equation

您输入星期几作为int(星期日= 0 ...星期六= 6),并输出直到最近星期六的天数。

如果是星期六,它会返回0,因为它是星期六。如果是星期天,它会返回-1,因为它是在星期六的第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");
        }
    }

我讨厌这个转换语句,但我无法找出一个可以替换它的简单等式。

3 个答案:

答案 0 :(得分:2)

我假设您正在使用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;
    }

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

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 https://stackoverflow.com/questions/33519165/is-there-a-simple-equation-i-can-replace-this-method-with
 * @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);
    }
}