• ベストアンサー

どのようなロジックがありますか?

1000円以上~2000円未満は100円引き 2000円以上~5000円未満は400円引き 5000円以上~500円引き といった感じの割引の設定があったとして、 1000円以上~2000円未満は100円引き 2000円以上~6000円未満は400円引き 5000円以上~500円引き と誤って設定しそうになった場合5000~6000円の設定が400円割引なのか500円割引なのか設定が重なってしまうことになります。 これをエラーと判断したいのですが、どのような考え方ロジックがスマートでしょうか?

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

  • ベストアンサー
  • Gotthold
  • ベストアンサー率47% (396/832)
回答No.3

A1以上~B1円未満 A2以上~B2円未満 A3以上~B3円未満 と区間が並んでいるとして、 「B1 <= A2」であること、 「B2 <= A3」であること・・・ を順次チェックしていけば良いのではないでしょうか。 もちろん、区間の開始・終了が逆転していないこと(A1 < B1 であること)や 区間が昇順になっていること(A1 < A2 < A3 ・・・)は別途保証するものとします。

muuming2001
質問者

お礼

なるほど! 左の値でソートしてそのようにチェックすれば一番いいですね。

その他の回答 (2)

  • maiko0333
  • ベストアンサー率19% (839/4401)
回答No.2

まず、こういうのはプログラムで管理しない。 ファイルやデータベースから該当のものを引っ張ってくるのが普通。 その、データを作る画面を作るときにそういう入力ミスを防ぐ対策をする。 かんたんで済ますなら、「以上」のみ入力し、未満は上位の1円下とするもの。 1000 100 2000 400 5000 500 のみのデータにすれば矛盾が起こらなくて済む。

muuming2001
質問者

お礼

編集できなくて良いなら定義して引っ張ってくるだけにしますが、編集できないといけないので、データベースにデータを登録するための画面をつくりたいのです。 なるほど片方だけ入れさせれば重複さえしてなければOKになりますね。

  • pringlez
  • ベストアンサー率36% (598/1630)
回答No.1

keyとvalueの単純なデータ構造で管理し、 keyの降順でソートし、ループしながら もしkeyこの値以上だったらvalue引きとしbreak、 key未満だったら次のデータを使用し判定、でいいと思います。 つまり…未満に相当する値は使用しません。

muuming2001
質問者

お礼

ありがとうございます。 どんな場合もエラーにせず片方のみ使うということですね。 ただ、今回エラーにしたいので・・・

関連するQ&A