您输入星期几作为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");
}
}
我讨厌这个转换语句,但我无法找出一个可以替换它的简单等式。
答案 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);
}
}