作者TonyQ (沉默是金)
看板java
标题Re: [问题] 宣告连续的数列阵列
时间Thu Jul 10 11:24:45 2008
※ 引述《andrew43 (Myrmarachne)》之铭言:
: 新手上路,盼同位先进多多包涵。
: 过去习惯使用 matlab/octave 中,建立连续数列之阵列,例如
: var=1:0.5:3
: 表示建立一个名为 var,内容为 1 至 3 以 0.5 为相距之一维阵列。
: 我的问题是,java 可以快速地做类似的事吗?
: 难不成每次都要用回圈来做?
: 现在小弟正试着将过去以 matlab/octave 的脚本改写成 java,
: 但面对这样基本的问题仍不知如何是好。
: 盼请伺教,拜谢在先。
基本语法应该是没有 , 不过有些设计准则可以参考.
如果找不到现成的作法(虽然我觉得应该有些外挂套件也会做) , 就扩充他.
重点往往不在於是不是每次都要用回圈来做,而是你是不是每次都要重复写回圈的code.
以及当找到比回圈更好的做法的时候,能不能快速的替换.
以下方的例子可以将getVar独立於执行的程式之外,而变成一个扩充组件(MatlabUtils).
当然我不确定 var 实际的运作规则是如何(是否取首尾之类的),
这只是个在设计结构上的建议.
将来如果你找到更好的做法,也只需要修改MatlabUtils里面的方法,
就可以一并异动到全部使用它的地方.
在设计上 , 这可说是将关系解离的一个方法.
──────────────────────────────────
public class practiceOnly {
public static void main(String[] args) {
double[] ary = MatlabUtils.getVar(1, 0.5, 3);
for (double i : ary) {
System.out.println(i);
}
double[] anotherary= MatlabUtils.getVar(1, 1, 5);
for (double i : anotherary) {
System.out.println(i);
}
}
}
class MatlabUtils {
public static double[] getVar(double start, double step, double end)
{
if (end < start)
return new double[] {};
int length = (int) ((end - start) / step) + 1;
double[] ret = new double[length];
double s = start;
for (int i = 0; s <= end; i++) {
ret[i] = s;
s += step;
}
return ret;
}
}
--
▄▅▆▇███▇▆▅▄▃ ╰┼╯─╮ ╮
◥███████████◣ ╰┼╯=│=│
◥██████───────◣ *. ╯ ╯ ╯ の 物 语 .*
◥███████──────◣ ~ ◢◣ ◢◣
◥██████───────◤ ◥◤* 空白的世界.翼
*◥◤
◥██▁▂▃▄▅▆▇███▆▅▄▃▂▂
~telnet://tony1223.no-ip.info
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.128.219.202
※ 编辑: TonyQ 来自: 220.128.219.202 (07/10 11:26)
1F:推 andrew43:非常感谢。我了解你的意思。 07/10 11:57
2F:推 slalala:这也是之前老板要我去碰MATLAB我却完全无法上手的原因 07/10 17:38