当前位置: 代码迷 >> java >> 如何使用if函数调用数组的元素
  详细解决方案

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

热度:99   发布时间:2023-07-31 11:10:01.0

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

您已经将所有有效值存储在一个简单的查找表中,您只需要确保所请求的值在可用值范围内。

基本的答案是做一些像......

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 (小于或等于)

你很亲密 对于那些说Switch或链条的人来说,这个问题太过分了。

result = days[Math.abs(prime % days.length)];

该数组的作用类似于switch语句,并且Math.abs的模数运算符(绝对值)就像一个安全网,可以保持在0-6数组的有效范围内。

致@MadProgrammer的Math.abs

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

你为什么不使用课程?

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是必需的

你可以这样做:

if (prime >= 0 && prime < days.length) result = days[prime];
else result = "Check your code."

因为prime基本上是你想要的那一天的指数。

您可以使用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;
    }
}
  相关解决方案