作者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)
推 andrew43:非常感謝。我了解你的意思。 07/10 11:57
推 slalala:這也是之前老闆要我去碰MATLAB我卻完全無法上手的原因 07/10 17:38