Для вызова двух переменных @ x4u является правильным.Вызов трех переменных будет немного сложнее эмулировать.
Например, я думаю, что linspace (1,30,60) должно выдавать значения 1, 1,5, 2, 2,5, 3, 3,5 ...или, может быть, это значения для linspace (1,30,59) - в любом случае, та же проблема.
С этим форматом вам придется делать вычисления самостоятельно - лично я бы создал новыйобъект, чтобы сделать все это для меня и забыть цикл for.
counter=new Linspace(1,30,60);
while(counter.hasNext()) {
process(counter.getNextFloat())
}
или просто
while(float f : new Linspace(1,30,60)) {
process(f);
}
, если ваш объект Linspace реализует Iterable.
Тогдавнутренняя часть объекта counter должна быть достаточно очевидна для реализации, и она будет легко сообщать вам, что он делает, не запутывая ваш код кучей числовых вычислений для выяснения соотношений.
Реализация может быть чем-то вродеэто: (ПРИМЕЧАНИЕ: не проверено, и я уверен, что это будет уязвимо для крайних случаев и ошибок с плавающей запятой! Вероятно, он также не будет обрабатывать end
public class Linspace {
private float current;
private final float end;
private final float step;
public Linspace(float start, float end, float totalCount) {
this.current=start;
this.end=end;
this.step=(end - start) / totalCount;
}
public boolean hasNext() {
return current < (end + step/2); //MAY stop floating point error
}
public float getNextFloat() {
current+=step;
return current;
}
}