问题描述
基本上,我有一个变量'prime'。 它只能取0到6之间的值。根据它的值,我想要一个字符串'result'是星期日,如果prime是0,星期一如果是1,等等。目前,它是这样编码的:
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.";
}
我想知道是否有更快的方法来做到这一点? 我用一周的日子创建了一个数组:
String[] days = new String[7];
days [0] = "Sunday";
days [1] = "Monday";
days [2] = "Tuesday";
days [3] = "Wednesday";
days [4] = "Thursday";
days [5] = "Friday";
days [6] = "Saturday";
如何快速优雅地编写代码,以便如果prime的值为0,则字符串'result'是数组的第一个元素,依此类推,直到prime为6,字符串'result'是第七个元素?
1楼
您已经将所有有效值存储在一个简单的查找表中,您只需要确保所请求的值在可用值范围内。
基本的答案是做一些像......
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
),否则它会返回错误消息(或者你可以抛出异常)。
请记住,数组是0
索引的,因此需要使用< days.length
(小于)而不是<= days.length
(小于或等于)
2楼
你很亲密 对于那些说Switch或链条的人来说,这个问题太过分了。
result = days[Math.abs(prime % days.length)];
该数组的作用类似于switch语句,并且Math.abs
的模数运算符(绝对值)就像一个安全网,可以保持在0-6数组的有效范围内。
致@MadProgrammer的
Math.abs
从
模数 - 用左手操作数除左手操作数并返回余数
3楼
你为什么不使用课程?
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
因为您的代码从零开始,枚举在一个中。
如果你必须将星期日设置为第一天(而不是星期一 ,这是枚举中的第一天)... minus
方法将起作用:
DayOfWeek dayOfWeek = DayOfWeek.of(++prime).minus(1);
编辑:解决方案的优缺点
优点 :
不要求物品维持你的日子。
不要使用条件语句。
可以轻松更改文本样式和语言。
缺点 :
- java 1.8是必需的
4楼
你可以这样做:
if (prime >= 0 && prime < days.length) result = days[prime];
else result = "Check your code."
因为prime
基本上是你想要的那一天的指数。
5楼
您可以使用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;
}
}