Java 完成后重新启动迭代器
我有一个列表,我想得到Java 完成后重新启动迭代器,java,list,Java,List,我有一个列表,我想得到I-1、I和I+1位置的值。当i是第一个或最后一个索引时,它将抛出索引outofboundsexception。为了防止出现这种情况,我会编写一些if语句,然后像这样硬编码: if (i == 0){ a = list.get(list.size()-1); b = list.get(0); c = list.get(1); } else if (i == list.size()-1){ a = list.get(i-1); b =
I-1
、I
和I+1
位置的值。当i
是第一个或最后一个索引时,它将抛出索引outofboundsexception
。为了防止出现这种情况,我会编写一些if语句,然后像这样硬编码:
if (i == 0){
a = list.get(list.size()-1);
b = list.get(0);
c = list.get(1);
} else if (i == list.size()-1){
a = list.get(i-1);
b = list.get(i);
c = list.get(0);
} else {
a = list.get(i-1);
b = list.get(i);
c = list.get(i+1);
}
我发现这条路有点静。假设我想以这种方式从列表中获取n
条目,您将如何做到这一点?您可以使用(I-1+list.size())%list.size()
和(I+1)%list.size()
这也将处理长度为1的列表 较重的选择:
- 写一个方法
<T> T get(List<T> list, int i) { i %= list.size(); return list.get(i >= 0 ? i : i + list.size()); }
T获取(列表,int i) { i%=list.size(); 返回list.get(i>=0?i:i+list.size()); }
- 子类和重写
get()
- 创建一个围绕索引的包装类
int prev, i, next;
//start loop here
prev = (i == 0 ? list.size()-1 : i-1);
next = (i == list.size()-1 ? 0 : i+1);
a = list.get(prev);
b = list.get(i);
c = list.get(next);
// end loop here
您必须处理小列表,(size()为什么不能用foreach迭代并重新分配旧值,如下所示:
List<Integer> list = Arrays.asList(1, 5, 7, 3, 4);
int n = 3; // how much entries we take
int a = 0, b = 0, c;
for (int i = 0; i < n; i++) {
c = b;
b = a;
a = list.get(i);
// do some stuff
}
List-List=Arrays.asList(1,5,7,3,4);
int n=3;//我们接受多少条目
int a=0,b=0,c;
对于(int i=0;i
我觉得这段代码可读性很强,可以理解。但它不能处理列表包含单个元素的情况。获取N个条目是什么意思?如果列表仅包含2个元素,则将分别获取第一个或第二个元素,具体取决于i=1
或i=0
代码真的很糟糕,有N个条目,我想说的是从列表中获取尽可能多的条目,一次可能是这三个,一次从I-3到I+3这不是一个真正的编码问题,对吧?这是关于你表达你想要的。简言之,如果N=2*j+1
和k=list.size()
,那么我想你想要从元素((I-j+k)%k)
到元素((I+j)%k)
。写你自己的代码在这两个元素之间迭代。@DavidWallace谢谢,修正了。好的,我已经删除了我的反对票。但是,你真的回答了这个问题吗?问题是“您如何从列表中获取n
条目”。我在这里看不到答案。greate idea for(I+n)%list.size()@DavidWallace的想法是将-1和+1替换为-n和+n。看起来OP可以工作,但您必须停止一次以获取所需的三个条目。如果您希望获得第一个、第二个和最后一个条目,它将为您提供0 1 5而不是4 1 5,如果您希望将最后一个条目作为“基”,则相同“但是我想知道你怎么能用这个迭代来做别的事情,我认为它曾经是有用的!”三元运算符:非常有用,我总是忘记它