PHP';Java中的s范围函数

PHP';Java中的s范围函数,java,php,function,range,Java,Php,Function,Range,PHP的range函数在PHP中的工作方式如下: $leap_years = range(1900, 2000, 4); 创建类似于1900、1904、1908,… Java中有这样简单的东西吗?没有为此内置任何东西,但实现不可变的Iterable(或整数或其他)这样的范围相对简单。只需创建一个自定义的迭代器,该迭代器从开始值开始,然后每次调用next()时递增,直到传递结束值为止。您必须决定如何以及是否要处理从高到低的迭代等等,但这并不难。您还可以将其作为列表的不可修改实现,其中每个索引的值

PHP的range函数在PHP中的工作方式如下:

$leap_years = range(1900, 2000, 4);
创建类似于
1900、1904、1908,…

Java中有这样简单的东西吗?

没有为此内置任何东西,但实现不可变的
Iterable
(或
整数
或其他)这样的范围相对简单。只需创建一个自定义的
迭代器
,该迭代器从开始值开始,然后每次调用
next()
时递增,直到传递结束值为止。您必须决定如何以及是否要处理从高到低的迭代等等,但这并不难。您还可以将其作为
列表
的不可修改实现,其中每个索引的值都是按需计算的(
开始+索引*增量


虽然您的问题涉及基于范围创建一个“数组”,但通常不需要整个范围内充满数据的数组,特别是当您只想遍历范围内的数字时。如果这就是您想要的,那么您将遍历范围内的数字两次,以创建一个数组或
列表
,然后读取它。正如我所描述的,使用惰性范围迭代器并没有这个缺点。此外,如果您确实希望所有值直接存储在内存中,则可以轻松地将惰性迭代器复制到
列表中。与构建阵列相比,它的唯一缺点是一些自动装箱开销。

您可以这样模拟它:

public int[] range(int startVal, int endVal, int increment) {
  if (startVal >= endVal) {
    //handle error or add option to go backwards
  }
  int count = ((endval - startval) / increment) + 1;
  int[] myArr = new int[count];
  for (int i=0; i <= count; i++) {
    myArr[i] = startVal + (i * increment);
  }
  return myArr;
 }
}
public int[]范围(int startVal、int endVal、int increment){
如果(startVal>=endVal){
//处理错误或添加后退选项
}
整数计数=((endval-startval)/增量)+1;
int[]myArr=新的int[count];

对于(int i=0;i你应该这样做:

public int[] range(int start, int end, int increment) {
   if (start < end && increment < 0) throw new IllegalArgumentException();
   if (start > end && increment > 0) throw new IllegalArgumentException();

   int[] values = new int[Math.abs((end - start) / increment) + 1];
   boolean reverse = start > end;

   for (int i = start, index = 0; reverse ? (i >= end) : (i <= end); i+=increment, ++index)
   {
       values[index] = i;
   }
   return values;
}
public int[]范围(int开始、int结束、int增量){
if(start结束&递增>0)抛出新的IllegalArgumentException();
int[]value=newint[Math.abs((结束-开始)/增量)+1];
布尔反向=开始>结束;

对于(int i=start,index=0;reverse?(i>=end):(我知道1900不是闰年。@OP:你对闰年的定义不太准确……可以被100整除而不能被400整除的年份不是闰年;)感谢大家记住,尽管我会像现在这样离开,但这不是问题的目的。你不能将原语与泛型一起使用。
ArrayList
应该是
ArrayList
很好,谢谢。我没有Java来测试它。(@Drackir:Oohh.你在工作:你必须工作;-)或者你是否在工作也没关系?;-)@Drackir:我不确定,但是……我认为你不能使用
ArrayList.toArray()
(它返回一个
对象[]
)将其强制转换为,或者将其用作
int[]
。我想这对
范围(2000、1000、100)这样的反向范围不起作用;