有没有一个简单的方程式可以用来代替这个方法?
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);
}
}
您将星期几作为整数输入 (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);
}
}