我有一个名为dayCounter
的int,运行1到7.我有一个名为day
的字符串。 dayCounter
使用TimerTask
每10秒递增private void run()
。
我在用于TimerTask
::
if (dayCounter == 1) {
day = "Monday";
}
方法中使用以下if语句
package com.example.dom.pointfbugrepro;
import android.graphics.PointF;
import org.junit.Test;
import static org.junit.Assert.*;
public class ExampleUnitTest {
@Test
public void pointf_isCorrect() throws Exception {
PointF foo = new PointF(5, 0);
assertEquals(5, foo.x, 0.0001f);
}
}
我每周的每一天都有这样的if语句。是否有更有效的方法可以获得相同的结果。我想也许创建一个包含String月的数组,然后以某种方式递增它。但我不知道如何去做。有什么想法吗?
答案 0 :(得分:4)
除了if语句之外,您可以使用带计数器的开关案例
switch(dayCounter){
case 1:
day = "Monday";
break;
case 2:
day = "Tuesday";
break;
}
虽然这是另一种方法,但它们都创建了相同的字节代码,这两个选项之间的唯一区别是代码的可读性。
答案 1 :(得分:3)
最简单的方法可能是使用数组:
public class Demo {
public static void main(String[] args) {
System.out.println(getDay(1));
System.out.println(getDay(7));
}
// Returns the corresponding day for the given dayCounter.
// Assumes that dayCounter goes from 1-7.
private static String getDay(int dayCounter) {
String[] days = new String[] { "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday", "Sunday" };
return days[dayCounter - 1];
}
}
如果您的计数器超过7(例如,您在每个计时器步骤中将其递增1),您可能希望对此版本感兴趣,该版本基本上遍历所有可用日期:
public class Demo {
public static void main(String[] args) {
System.out.println(getDay(1));
System.out.println(getDay(7));
System.out.println(getDay(8));
System.out.println(getDay(13));
}
// Returns the corresponding day for the given dayCounter.
// Maps dayCounter to the range of 1-7, assumes that dayCounter
// goes from 1-Integer.MAX_VALUE.
private static String getDay(int dayCounter) {
String[] days = new String[] { "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday", "Sunday" };
return days[dayCounter % 7];
}
}
或者您可以使用DateFormatSymbols
来检索工作日,并为您自动翻译(几乎):
import java.text.DateFormatSymbols;
public class Demo {
public static void main(String[] args) {
System.out.println(getDay(1));
System.out.println(getDay(7));
}
// Returns the corresponding day for the given dayCounter.
// Assumes that dayCounter goes from 1-7.
private static String getDay(int dayCounter) {
String[] days = DateFormatSymbols.getInstance().getWeekdays();
return days[dayCounter];
}
}
或者对于Java 8及更高版本,目前首选的方法可能是使用新的java.time API(您可以使用方法参数)。此API包含一个方便的DayOfWeek
枚举。
import java.time.DayOfWeek;
import java.time.format.TextStyle;
import java.util.Locale;
public class Demo {
public static void main(String[] args) {
System.out.println(getDay(1));
System.out.println(getDay(7));
}
// Returns the corresponding day for the given dayCounter.
// Assumes that dayCounter goes from 1-7.
private static String getDay(int dayCounter) {
return DayOfWeek.of(dayCounter)
.getDisplayName(TextStyle.FULL, Locale.getDefault());
}
}
如果您只想替换if
语句,请按照Ryan的回答中提到的switch-case
进行操作。
答案 2 :(得分:1)
你可以拥有一系列字符串,dayOfWeek,一周中的每一天。然后使用dayCounter作为数组的索引。例如,如果dayCounter = 1,则dayOfWeek [dayCounter]将为“Monday”。这样,您只需要一个语句来获取星期几的名称。