是否有matlab的冒号运算符或linspace的java版本?例如,我想为均匀间隔的数字创建一个for循环,但我不想打扰手动创建这些数字的数组.
例如,为了得到1到30之间的所有整数,在matlab中我会输入:
1:30
Run Code Online (Sandbox Code Playgroud)
要么
linspace(1,30)
Run Code Online (Sandbox Code Playgroud)
对于两个变量调用,@ 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())
}
Run Code Online (Sandbox Code Playgroud)
或者干脆
while(float f : new Linspace(1,30,60)) {
process(f);
}
Run Code Online (Sandbox Code Playgroud)
如果您的Linspace对象实现了Iterable.
然后计数器对象的内部应该非常明显地实现,并且它可以很容易地与您进行通信,而不会使用一堆数字计算来模糊您的代码以计算出比率.
一个实现可能是这样的:(注意:未经测试,我很确定这将容易受到边缘情况和浮点错误的影响!它也可能无法处理结束<开始向后计数,这只是一个建议得到你去.)
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;
}
}
Run Code Online (Sandbox Code Playgroud)