Java использует передачу по значению, и поэтому вы не можете изменять параметры (хотя, если параметры являются определяемым пользователем объектом, вы можете изменить объект, на который указывает параметр, но не сам параметр).
Одна вещь, которую вы могли бы рассмотреть, однако, это создать интерфейс типа итератора:
// RangeIterator.java
public class RangeIterator implements Iterator<Integer>
{
public RangeIterator(int first, int last){
_first = first;
_last = last;
if ( _first <= _last ){
_step = 1;
}else{
_step = -1;
}
}
public RangeIterator(int first, int last, int step){
if ( step == 0 ){
throw new IllegalArgumentException("Step must be non-zero.");
}
_first = first;
_last = last;
_step = step;
}
public boolean hasNext(){
if ( _step < 0 ){
return _first > _last;
} else {
return _first < _last;
}
}
public Integer next(){
int result = _first;
_first += _step;
return result;
}
public void remove(){
throw new UnsupportedOperationException("Not implemented.");
}
private int _first;
private int _last;
private int _step;
}
// Range.java
public class Range implements Iterable<Integer>
{
public Range(int first, int last){
_first = first;
_last = last;
if ( _first <= _last ){
_step = 1;
}else{
_step = -1;
}
}
public Range(int first, int last, int step){
if ( step == 0 ){
throw new IllegalArgumentException("Step must be non-zero.");
}
_first = first;
_last = last;
_step = step;
}
public Iterator<Integer> iterator(){
return new RangeIterator(_first,_last,_step);
}
private int _first;
private int _last;
private int _step;
}
Используя приведенный выше код, вы можете легко написать что-то вроде:
Range range = new Range(x,100);
for (int val : range){
println(val);
}
Поскольку я вижу, что вы пришли из Python, это должно выглядеть очень похоже на
for val in xrange(x,100):
print val;
Вы можете реализовать интерфейсы Iterable и Iterator , чтобы предоставить собственные генераторы, которые можно использовать в циклах for-each в Java. По сути, for (<i>Type</i> <i>identifier1</i> : <i>identifier2</i>)
выполняет итерацию содержимого identifier2 , который должен быть типом Iterable, и на каждой итерации назначает текущий элемент identifier1 . Цикл является просто синтаксическим сахаром для итерации по identifier2 .iterator ().