gpt4 book ai didi

java - 在 ArrayList 中计数时跳过元素

转载 作者:行者123 更新时间:2023-11-29 18:35:59 25 4
gpt4 key购买 nike

我正在尝试创建多个 Arraylist<Integer>来自 int 的范围,但是当我试图跳过一些元素时,一切都搞砸了。我将数字分成 5 个不同的 ArrayList<>并并行尝试将所有内容放在一个公共(public)的 Arraylist<> 中.在第一次跳过之前,我得到如下系列:

Rain    Snow    Cloudy    Sunshine
1 2 3 4
Rain Snow Cloudy Sunshine
5 6 7 8

在跳过第 29 天之后:

Rain    Cloudy   Sunshine    Rain
30 31 32 34

Rain Cloudy Sunshine Rain
34 35 36 38

下面是我的代码:

private List<Day> getCompleteDayList(){
ArrayList<Integer> sunshineArray = new ArrayList<>();
ArrayList<Integer> rainArray = new ArrayList<>();
ArrayList<Integer> cloudyArray = new ArrayList<>();
ArrayList<Integer> snowArray = new ArrayList<>();
ArrayList<Integer> fogArray = new ArrayList<>();
ArrayList<Integer> dayNumbersList = new ArrayList<>();
mDayList = new ArrayList<>();
Day currentDay = null;
int dayNumber = 0;
int dayImage = 0;
for (int i=1;i<=4;i++){
for (int k=i;k<=87;k+=4){
dayNumber = k;
if (i==1){
if (k==29){ // trying to skip 29
fogArray.add(k);
k = 30;// and begin counting from 30
}else if (k==58){//trying to skip 58
fogArray.add(k);
k=59;//and begin counting from 59
}else if (k==87){
fogArray.add(k);
}
rainArray.add(k);
}else if (i==2){
snowArray.add(k);
}else if (i==3){
cloudysArray.add(k);
}else {
sunshineArray.add(k);
}
dayNumbersList.add(dayNumber);
}
}
Collections.sort(dayNumbers);
int currentDayNumber = 0;
for (int i = 0;i < dayNumbers.size();i++){
currentDayNumber = dayNumbers.get(i);
if (rainArray.contains(currentDayNumber)){
dayImage = R.drawable.rain;
}else if (snowArray.contains(currentDayNumber)){
dayImage = R.drawable.snow;
}else if (cloudyArray.contains(currentDayNumber)){
dayImage = R.drawable.clouds;
}else if (sunshineArray.contains(currentDayNumber)){
dayImage = R.drawable.sunshine;
}else if (fogArray.contains(currentDayNumber)){
dayImage = R.drawable.rsz_water;
}
currentDay = new Day(currentDayNumber,dayImage);
mDayList.add(currentDay);
}
return mDayList;
}

我希望该系列保持跳过之前的状态,并且每 29 天成为 fogDay,所有这些我都显示在 Recyclerview 中。

谢谢!!!

最佳答案

问题是由第一次迭代引起的。您正在将 day(k) 增加一个,因此您实际上会跳过一些天数(例如 32 和 34 之间的间隔)并且之后的天数翻倍(32、34、34)。 (因为你从 25 到 30 再到 34,永远不会分配 33)。您也必须在其他 i 次迭代中增加 day(k)

i!=1 时,您没有增加 k 的值,因此您遇到了下雨天:1、5、9、13、17、21、25、30、34。雪天:2、6、10、14、18、22、26、30、34。

并且因为您正在调用 if (rainArray.contains(currentDayNumber))

else if (snowArray.contains(currentDayNumber)) 之前,您将设置下雨天而不是下雪天。

尝试显示列表的输出(例如 rainArray 和 snowArray),您就会发现问题所在。尝试:rainArray.stream().forEach(System.out::println),同样使用 snowArray。

如果将 else if 替换为 if,您会发现它们仍然存在。

编辑:这是一个在模数帮助下的数组中的工作示例,因为考虑到该错误,您的示例可能会变得太复杂。它可能会帮助您获得新的想法:

private List<Day> getCompleteDayList() {
// Temporary save days as (in my case) Strings
final List<String> rawDays = new ArrayList<>();
// The foggy days
final List<Integer> fogDays = Arrays.asList(29, 58, 87);

final int NUMBER_OF_DAYS = 100;
// When following a certain pattern, create it first
for (int i = 1; i <= NUMBER_OF_DAYS; ++i) {
switch (i % 4) {
case 1:
rawDays.add("rain");
break;
case 2:
rawDays.add("snow");
break;
case 3:
rawDays.add("cloudy");
break;
case 0:
rawDays.add("sunshine");
break;
}
}

// Add a fog string in the list. If you want to replace, you may try to rawDays.set(...)
fogDays.stream().forEach(dayNumber -> rawDays.add(dayNumber - 1, "fog"));

final List<Day> days = new ArrayList<>();

// Add the days
int dayIndex = 1;
for (final String weather : rawDays) {
days.add(new Day(dayIndex++, weather));
if (days.size() >= NUMBER_OF_DAYS) {
break;
}
}
return days;
}

关于java - 在 ArrayList 中计数时跳过元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54364395/

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