- ベストアンサー
どのようなロジックがありますか?
1000円以上~2000円未満は100円引き 2000円以上~5000円未満は400円引き 5000円以上~500円引き といった感じの割引の設定があったとして、 1000円以上~2000円未満は100円引き 2000円以上~6000円未満は400円引き 5000円以上~500円引き と誤って設定しそうになった場合5000~6000円の設定が400円割引なのか500円割引なのか設定が重なってしまうことになります。 これをエラーと判断したいのですが、どのような考え方ロジックがスマートでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
A1以上~B1円未満 A2以上~B2円未満 A3以上~B3円未満 と区間が並んでいるとして、 「B1 <= A2」であること、 「B2 <= A3」であること・・・ を順次チェックしていけば良いのではないでしょうか。 もちろん、区間の開始・終了が逆転していないこと(A1 < B1 であること)や 区間が昇順になっていること(A1 < A2 < A3 ・・・)は別途保証するものとします。
その他の回答 (2)
- maiko0333
- ベストアンサー率19% (839/4401)
まず、こういうのはプログラムで管理しない。 ファイルやデータベースから該当のものを引っ張ってくるのが普通。 その、データを作る画面を作るときにそういう入力ミスを防ぐ対策をする。 かんたんで済ますなら、「以上」のみ入力し、未満は上位の1円下とするもの。 1000 100 2000 400 5000 500 のみのデータにすれば矛盾が起こらなくて済む。
お礼
編集できなくて良いなら定義して引っ張ってくるだけにしますが、編集できないといけないので、データベースにデータを登録するための画面をつくりたいのです。 なるほど片方だけ入れさせれば重複さえしてなければOKになりますね。
- pringlez
- ベストアンサー率36% (598/1630)
keyとvalueの単純なデータ構造で管理し、 keyの降順でソートし、ループしながら もしkeyこの値以上だったらvalue引きとしbreak、 key未満だったら次のデータを使用し判定、でいいと思います。 つまり…未満に相当する値は使用しません。
お礼
ありがとうございます。 どんな場合もエラーにせず片方のみ使うということですね。 ただ、今回エラーにしたいので・・・
お礼
なるほど! 左の値でソートしてそのようにチェックすれば一番いいですね。