基本上,我有一个变量'prime'。它只能取0到6之间的值。根据它的值,我想要一个字符串'result'是星期日,如果prime是0,星期一,如果是1,等等。目前,它是这样编码的:
event.getBlock().getType() == Material.TNT
我想知道是否有更快的方法来做到这一点?我已经创建了一个星期几的数组:
String result = new String();
if (prime == 0)
{
result = "Sunday";
}
if (prime == 1)
{
result = "Monday";
}
if (prime == 2)
{
result = "Tuesday";
}
if (prime == 3)
{
result = "Wednesday";
}
if (prime == 4)
{
result = "Thursday";
}
if (prime == 5)
{
result = "Friday";
}
if (prime == 6)
{
result = "Saturday";
}
else
{
result = "Check your code.";
}
如何快速优雅地对其进行编码,以便如果prime的值为0,则字符串'result'是数组的第一个元素,依此类推,直到prime为6,字符串'result'为第七元素?
答案 0 :(得分:7)
您已将所有有效值存储在一个简单的查找表中,您只需确保所请求的值在可用值范围内。
基本答案是做一些像......
if (prime >= 0 && prime < days.length) {
result = days[prime];
} else {
result = prime + " is not within a valid range";
// Or throw an exception
}
这样做可以确保prime
值在可接受值的有效范围内(0..days.length - 1
),否则会返回错误消息(或者您可以抛出异常)。 / p>
请记住,数组被0
编入索引,因此需要使用< days.length
(少于)而不是<= days.length
(少于或等于)
答案 1 :(得分:5)
你很亲密。对于那些说Switch或链条的人来说,这个问题太过分了。
result = days[Math.abs(prime % days.length)];
数组的行为类似于switch语句,包含在Math.abs
(绝对值)中的模数运算符就像一个安全网,可以保持在0-6数组的有效范围内。
致
的@MadProgrammerMath.abs
模数 - 用左手操作数除左手操作数并返回余数
答案 2 :(得分:2)
为什么不使用DayOfWeek
课程?
import java.time.DayOfWeek;
试试这个......
try {
DayOfWeek dayOfWeek = DayOfWeek.of(++prime);
System.out.println(dayOfWeek.getDisplayName(TextStyle.FULL, Locale.getDefault()));
} catch (java.time.DateTimeException ex) {
System.out.println("Invalid value for DayOfWeek");
}
请注意,我们必须执行++prime
,因为您的代码从零开始,枚举在一个。
如果您必须将 Sunday 设置为第一天(而不是枚举中第一个 Monday )... minus
方法将诀窍:
DayOfWeek dayOfWeek = DayOfWeek.of(++prime).minus(1);
编辑:解决方案的优缺点
赞成:
不要求物品维持你的日子。
不要使用条件语句。
可以轻松更改文字样式和语言。
缺点:
答案 3 :(得分:1)
你可以这样做:
if (prime >= 0 && prime < days.length) result = days[prime];
else result = "Check your code."
因为prime
基本上是您想要的那天的索引。
答案 4 :(得分:0)
您可以使用Enum并自行定义
public enum Week {
SUNDAY(1, "Sunday"), Monday(2, "Monday"), TUESDAY(3, "Tuesday"), WEDNESDAY(
4, "Wednesday"), THURSDAY(6, "Thursday"), FRIDAY(6, "Friday"), SATURDAY(
7, "Saturday");
private int id;
private String name;
static Map<Integer, String> map = new HashMap<Integer, String>();
static {
for (Week w : Week.values()) {
map.put(w.getId(), w.name);
}
}
private Week(int id, String name) {
this.setId(id);
this.setName(name);
}
public static String getNameById(int id) {
return map.get(id);
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setId(int id) {
this.id = id;
}
public int getId() {
return id;
}
}