如何使用if函数调用数组的元素

时间:2015-07-17 02:06:50

标签: java arrays if-statement

基本上,我有一个变量'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'为第七元素?

5 个答案:

答案 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数组的有效范围内。

  

Math.abs

的@MadProgrammer

来自Tutorials Point

  

模数 - 用左手操作数除左手操作数并返回余数

答案 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);

编辑:解决方案的优缺点

赞成

  • 不要求物品维持你的日子。

  • 不要使用条件语句。

  • 可以轻松更改文字样式和语言。

缺点

  • 需要java 1.8

答案 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;
    }
}