• ベストアンサー

こういう場合、どういうロジックにすればいいですか?

お世話になります。 引数(z)で数値を受け取り、それがAにある数値と一致すればBの値を 返すというようなことをやりたいのですが、 A      B 10~20 0.1 20~50 0.5 ※このようなパターンが100列続く if文で(z <= 10 || z >= 20)といった感じで判定するのは かなり大変です・・・。 なにかよい方法はないでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • liar_adan
  • ベストアンサー率48% (730/1515)
回答No.4

配列を使えば簡単です。 int[] range = { 10, 20, .... 1000}; double[] value = { 0.1, 0.5, ..... 365.25 }; のように二つの配列を作っておきます。 (このときrangeの個数を101個にする必要があります) そしたら関数の中でfor文を使い double func(int z){ for(int i=0; i<100; i++){ //↓||ではなくて&& if(range[i] <= z && z < range[i + 1]) { return value[i]; } return (範囲内に無いときの値); } のようにやれば動きます。 上記のやつは、 「ちょうど境界と一致する値の時はどうするのか」 「範囲外のときはどうするのか」 を考慮していないので、そのままは使えません。 参考にして書き直してください。

kazuoao
質問者

お礼

やはり教えてgooの皆さんは天才ですよ! 本当にどうもありがとうございました!

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • dd44
  • ベストアンサー率28% (151/521)
回答No.3

A,B,Cは3行の2次元配列に入れてループさせたらどうでしょう? int ar[][] = {{10,20,0.1}, {20,50,0.5], ... }; みたいな感じで宣言して、 for(int i=0; i<100; i++){ if(ar[i][0] < z && z < ar[i][1]){ return ar[i][2]; } } ・・・って、素人考えです。

kazuoao
質問者

お礼

素人考えだんてとんでもないですよ! とっても参考になりました! どうもありがとうございます!

すると、全ての回答が全文表示されます。
回答No.2

AとBの値の間に、何らかの規則性とかは 見いだせないのでしょうか。 あれば、計算するだけのこと。 まったくのランダムなの?

すると、全ての回答が全文表示されます。
  • t-satoh
  • ベストアンサー率35% (211/591)
回答No.1

 パターンをファイルに書いておいて、 1行読む込むたびに判定を行うのはどうでしょうか?(^^;) これならif文は一つで済みます。

kazuoao
質問者

補足

ありがとうございます。 いろいろ事情があって外部のファイルは使えないんです・・・。 Javaファイル内で処理しないといけなくて・・・。

すると、全ての回答が全文表示されます。

関連するQ&A