gpt4 book ai didi

java - 遍历一周中的几天时循环增量值

转载 作者:太空狗 更新时间:2023-10-29 13:08:19 27 4
gpt4 key购买 nike

在我的 Android 应用程序中,我使用以下 MapCalendar 类的日期映射到 String:

Map<Integer, String> map = new HashMap<>(7);
// values of the Calendar field
map.put(Calendar.MONDAY, "Mon"); // 2
map.put(Calendar.TUESDAY, "Tue"); // 3
map.put(Calendar.WEDNESDAY, "Wed"); // 4
map.put(Calendar.THURSDAY, "Thu"); // 5
map.put(Calendar.FRIDAY, "Fri"); // 6
map.put(Calendar.SATURDAY, "Sat"); // 7
map.put(Calendar.SUNDAY, "Sun"); // 1

然后将 Button 动态添加到带有日期文本的 LinearLayout 中,如下所示:

LinearLayout dayLayout = (LinearLayout) findViewById(R.id.layout_days);

for(int i = 1; i <= 7; i++) {
Button button = new Button(this);
button.setText(map.get(i));
dayLayout.addView(button);
}

这工作正常,但是 Button 的列表总是从星期日开始,而不管当前的 Locale

我正在尝试重写此循环,以便将一周的第一天考虑在内。

像这样:

LinearLayout dayLayout = (LinearLayout) findViewById(R.id.layout_days);
int firstDayOfWeek = Calendar.getInstance().getFirstDayOfWeek();

for(int i = firstDayOfWeek; i <= 7; ???) { // this is where i'm stuck
Button button = new Button(this);
button.setText(map.get(i));
dayLayout.addView(button);
}

问题是我无法找出以正确顺序获取日期的正确公式。

如果一周的第一天是星期一,则循环必须按 2 3 4 5 6 7 1 进行。

我想我必须使用模运算符,我只是不知道如何操作。

我真的很感激任何建议,也许我的方法是完全错误的。

最佳答案

首先,您不应该使用 Calendar.* 常量的数值。数值是实现细节,而不是 API,不应像 for 循环尝试那样直接使用。

将常量存储在列表中会更好:

List<Integer> days = Arrays.asList(
Calendar.MONDAY,
Calendar.TUESDAY,
Calendar.WEDNESDAY,
Calendar.TUESDAY,
Calendar.FRIDAY,
Calendar.SATURDAY,
Calendar.SUNDAY
);

然后找到值对应于firstDayOfWeek的索引:

int start = days.indexOf(firstDayOfWeek);

然后,通过将 0..6 索引按 start 的值和模运算符旋转来创建正确的映射键,如下所示:

for(int i = 0; i < 7; i++) {
int key = days.get((start + i) % 7);
Button button = new Button(this);
button.setText(map.get(key));
dayLayout.addView(button);
}

关于java - 遍历一周中的几天时循环增量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44597313/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com