2026.03.23
クランプ
目次
クランプとは
プログラミングでのクランプ(clamp)は、値を一定の範囲に収めることをいいます。
範囲を最大値maxvalueと最小値minvalueで指定し、値valueが最小値minvalueより小さい場合に最小値minvalueを、最大値maxvalueより大きい場合に最大値maxvalueを値valueに代入します。
値valueが範囲内の場合はそのままにします。
以下は、クランプの例です。
例1.値が最小値より小さい場合
最小値 minvalue=0 最大値 maxvalue=100 値 value=-5 値valueが最小値minvalueより小さいので、value=minvalue=0にします
例2.値が最大値より大きい場合
最小値 minvalue=0 最大値 maxvalue=100 値 value=120 値valueが最大値maxvalueより大きいので、value=maxvalue=100にします
例3.値が範囲内の場合
最小値 minvalue=0 最大値 maxvalue=100 値 value=75 値valueが最小値以上で、最大値以下なので、valueを変更せずにvalue=75のままです。
Javaソースコード - Math.clampを使う方法
Math.clampメソッドを使ってクランプするJavaソースコード例です。
値の範囲と値はdouble型で指定しています。
Clamp0.java
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030
import java.util.Scanner; public class Clamp0 { // メインメソッド public static void main( String[] args ) { // Scannerを作成 Scanner scan = new Scanner( System.in ); // 値の最小値を入力 System.out.println( "値の最小値を入力してください" ); double minvalue = scan.nextDouble(); // 値の最大値を入力 System.out.println( "値の最大値を入力してください" ); double maxvalue = scan.nextDouble(); // 値を入力 System.out.println( "値を入力してください" ); double value = scan.nextDouble(); // 結果を出力 System.out.println( "最小値 : " + minvalue ); System.out.println( "最大値 : " + maxvalue ); System.out.println( "値 : " + value ); System.out.println(); System.out.println( "範囲に収めた値 : " + Math.clamp( value, minvalue, maxvalue ) ); } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis Clamp0.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac Clamp0.java
実行
C:\talavax\javasample>java Clamp0
値の最小値を入力してください 0 値の最大値を入力してください 10 値を入力してください -5 最小値 : 0.0 最大値 : 10.0 値 : -5.0 範囲に収めた値 : 0.0
001
import java.util.Scanner;
003
public class Clamp0 {
クラス名を、Clamp0としています。
004 005
// メインメソッド public static void main( String[] args ) {
006 007
// Scannerを作成
Scanner scan = new Scanner( System.in );
標準入力System.inを使って、Scannerクラスのscanを初期化しています。
009 010 011
// 値の最小値を入力 System.out.println( "値の最小値を入力してください" ); double minvalue = scan.nextDouble();
nextDoubleメソッドで、キーボードから入力された1行を読み取り、その値をdouble型の変数minvalueに代入しています。
ここで、入力待ち状態になり、Enterキーが押されるまでに入力した値が変数minvalueに格納されます。
013 014 015
// 値の最大値を入力 System.out.println( "値の最大値を入力してください" ); double maxvalue = scan.nextDouble();
nextDoubleメソッドで、キーボードから入力された1行を読み取り、その値をdouble型の変数maxvalueに代入しています。
ここで、入力待ち状態になり、Enterキーが押されるまでに入力した値が変数maxvalueに格納されます。
017 018 019
// 値を入力 System.out.println( "値を入力してください" ); double value = scan.nextDouble();
nextDoubleメソッドで、キーボードから入力された1行を読み取り、その値をdouble型の変数valueに代入しています。
ここで、入力待ち状態になり、Enterキーが押されるまでに入力した値が変数valueに格納されます。
021 022 023 024
// 結果を出力 System.out.println( "最小値 : " + minvalue ); System.out.println( "最大値 : " + maxvalue ); System.out.println( "値 : " + value );
026
System.out.println();
改行しています。
028
System.out.println( "範囲に収めた値 : " + Math.clamp( value, minvalue, maxvalue ) );
Math.clampメソッド
public static double Math.clamp( double value, double min, double max ) public static float Math.clamp( float value, float min, float max ) public static long Math.clamp( long value, long min, long max ) public static int Math.clamp( long value, int min, int max )
・2つの値のうち小さい方を返します。 パラメータ value : クランプする値 min : 最小許容値 max : 最大許容値 戻り値 min..max間隔に収まるクランプ値
Javaソースコード - if文を使う方法
if文を使ってクランプするJavaソースコード例です。
値の範囲と値はdouble型で指定しています。
Clamp1.java
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046
import java.util.Scanner; public class Clamp1 { // クランプメソッド // 引数のvalueをminvalue~maxvalueの範囲に収めた値を戻す // if文を利用 private static double clamp( double value, double minvalue, double maxvalue ) { // valueがminvalueより小さければ、minvalueを戻す if ( minvalue > value ) return minvalue; // valueがmaxvalueより大きければ、maxvalueを戻す if ( maxvalue < value ) return maxvalue; // ここまでくると、valueはminvalue~maxvalueの範囲内なので、valueを戻す return value; } // メインメソッド public static void main( String[] args ) { // Scannerを作成 Scanner scan = new Scanner( System.in ); // 値の最小値を入力 System.out.println( "値の最小値を入力してください" ); double minvalue = scan.nextDouble(); // 値の最大値を入力 System.out.println( "値の最大値を入力してください" ); double maxvalue = scan.nextDouble(); // 値を入力 System.out.println( "値を入力してください" ); double value = scan.nextDouble(); // 結果を出力 System.out.println( "最小値 : " + minvalue ); System.out.println( "最大値 : " + maxvalue ); System.out.println( "値 : " + value ); System.out.println(); System.out.println( "範囲に収めた値 : " + clamp( value, minvalue, maxvalue ) ); } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis Clamp1.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac Clamp1.java
実行例
java
値の最小値を入力してください 0 値の最大値を入力してください 10 値を入力してください -5 最小値 : 0.0 最大値 : 100.0 値 : 120.0 範囲に収めた値 : 100.0
001
import java.util.Scanner;
003
public class Clamp1 {
クラス名を、Clamp1としています。
005 006 007 008
// 引数のvalueをminvalue~maxvalueの範囲に収めた値を戻す // if文を利用 private static double clamp( double value, double minvalue, double maxvalue ) {
009 010
// valueがminvalueより小さければ、minvalueを戻す
if ( minvalue > value ) return minvalue;
valueの値がminvalueより小さい場合、return文でminvalueの値を戻しています。
012 013
// valueがmaxvalueより大きければ、maxvalueを戻す
if ( maxvalue < value ) return maxvalue;
valueの値がmaxvalueより大きい場合、return文でmaxvalueの値を戻しています。
015 016
// ここまでくると、valueはminvalue~maxvalueの範囲内なので、valueを戻す return value;
valueの値は、範囲内なのでreturn文でvalueの値を戻しています。
020 021
// メインメソッド public static void main( String[] args ) {
022 023
// Scannerを作成
Scanner scan = new Scanner( System.in );
標準入力System.inを使って、Scannerクラスのscanを初期化しています。
025 026 027
// 値の最小値を入力 System.out.println( "値の最小値を入力してください" ); double minvalue = scan.nextDouble();
nextDoubleメソッドで、キーボードから入力された1行を読み取り、その値をdouble型の変数minvalueに代入しています。
ここで、入力待ち状態になり、Enterキーが押されるまでに入力した値が変数minvalueに格納されます。
029 030 031
// 値の最大値を入力 System.out.println( "値の最大値を入力してください" ); double maxvalue = scan.nextDouble();
nextDoubleメソッドで、キーボードから入力された1行を読み取り、その値をdouble型の変数maxvalueに代入しています。
ここで、入力待ち状態になり、Enterキーが押されるまでに入力した値が変数maxvalueに格納されます。
033 034 035
// 値を入力 System.out.println( "値を入力してください" ); double value = scan.nextDouble();
nextDoubleメソッドで、キーボードから入力された1行を読み取り、その値をdouble型の変数valueに代入しています。
ここで、入力待ち状態になり、Enterキーが押されるまでに入力した値が変数valueに格納されます。
038 039 040
System.out.println( "最小値 : " + minvalue ); System.out.println( "最大値 : " + maxvalue ); System.out.println( "値 : " + value );
042
System.out.println();
改行しています。
044
System.out.println( "範囲に収めた値 : " + clamp( value, minvalue, maxvalue ) );
Javaソースコード - Math.min、Math.maxを使う方法
Math.minメソッドとMath.maxメソッドを使ってクランプするJavaソースコード例です。
値の範囲と値はdouble型で指定しています。
Clamp2.java
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041
import java.util.Scanner; public class Clamp2 { // クランプメソッド // 引数のvalueをminvalue~maxvalueの範囲に収めた値を戻す // Math.min、Math.maxメソッドを利用 private static double clamp( double value, double minvalue, double maxvalue ) { // minvalueとvalueを比較して大きい方の値と、maxvalueの大きさを比較して小さい方の値を戻す return Math.min( Math.max( minvalue, value ), maxvalue ); } // メインメソッド public static void main( String[] args ) { // Scannerを作成 Scanner scan = new Scanner( System.in ); // 値の最小値を入力 System.out.println( "値の最小値を入力してください" ); double minvalue = scan.nextDouble(); // 値の最大値を入力 System.out.println( "値の最大値を入力してください" ); double maxvalue = scan.nextDouble(); // 値を入力 System.out.println( "値を入力してください" ); double value = scan.nextDouble(); // 結果を出力 System.out.println( "最小値 : " + minvalue ); System.out.println( "最大値 : " + maxvalue ); System.out.println( "値 : " + value ); System.out.println(); System.out.println( "範囲に収めた値 : " + clamp( value, minvalue, maxvalue ) ); } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis Clamp2.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac Clamp2.java
実行
C:\talavax\javasample>java Clamp2
値の最小値を入力してください 0 値の最大値を入力してください 10 値を入力してください -5 最小値 : 0.0 最大値 : 100.0 値 : 75.0 範囲に収めた値 : 75.0
001
import java.util.Scanner;
003
public class Clamp2 {
クラス名を、Clamp2としています。
005 006 007 008
// 引数のvalueをminvalue~maxvalueの範囲に収めた値を戻す // Math.min、Math.maxメソッドを利用 private static double clamp( double value, double minvalue, double maxvalue ) {
009 010
// minvalueとvalueを比較して大きい方の値と、maxvalueの大きさを比較して小さい方の値を戻す return Math.min( Math.max( minvalue, value ), maxvalue );
Math.minメソッドとMath.maxメソッドを使ってvalueの値を範囲内に収める処理です。
minvalueとvalueを比べて大きい方の値と、maxvalueを比べて小さい方の値をreturn文で戻してします。
Math.max( minvalue, value )でminvalueとvalueの大きい方の値が得られます。まず、この処理でminvalueより小さい値にならないようにしています。
次のこの値とmaxvalueの値をMath.minに渡すことでmaxvalueより大きい値にならないようにしています。
Math.minメソッドとMath.maxメソッドの仕様は以下のとおりです。
Math.minメソッド
public static int Math.min( int a, int b ) public static long Math.min( long a, long b ) public static float Math.min( float a, float b ) public static double Math.min( double a, double b )
・2つの値のうち小さい方を返します。 パラメータ a : 1つめの値 b : 2つめの値 戻り値 aとbのうち、小さい値
Math.maxメソッド
public static int Math.max( int a, int b ) public static long Math.max( long a, long b ) public static float Math.max( float a, float b ) public static double Math.max( double a, double b )
・2つの値のうち大きい方を返します。 パラメータ a : 1つめの値 b : 2つめの値 戻り値 aとbのうち、大きい値
014 015
// メインメソッド public static void main( String[] args ) {
016 017
// Scannerを作成
Scanner scan = new Scanner( System.in );
標準入力System.inを使って、Scannerクラスのscanを初期化しています。
019 020 021
// 値の最小値を入力 System.out.println( "値の最小値を入力してください" ); double minvalue = scan.nextDouble();
nextDoubleメソッドで、キーボードから入力された1行を読み取り、その値をdouble型の変数minvalueに代入しています。
ここで、入力待ち状態になり、Enterキーが押されるまでに入力した値が変数minvalueに格納されます。
023 024 025
// 値の最大値を入力 System.out.println( "値の最大値を入力してください" ); double maxvalue = scan.nextDouble();
nextDoubleメソッドで、キーボードから入力された1行を読み取り、その値をdouble型の変数maxvalueに代入しています。
ここで、入力待ち状態になり、Enterキーが押されるまでに入力した値が変数maxvalueに格納されます。
027 028 029
// 値を入力 System.out.println( "値を入力してください" ); double value = scan.nextDouble();
nextDoubleメソッドで、キーボードから入力された1行を読み取り、その値をdouble型の変数valueに代入しています。
ここで、入力待ち状態になり、Enterキーが押されるまでに入力した値が変数valueに格納されます。
032 033 034 035
// 結果を出力 System.out.println( "最小値 : " + minvalue ); System.out.println( "最大値 : " + maxvalue ); System.out.println( "値 : " + value );
037
System.out.println();
改行しています。
039
System.out.println( "範囲に収めた値 : " + clamp( value, minvalue, maxvalue ) );
以上です。
クランプに関するコンテンツ
「クランプ」に関係があるコンテンツをまとめています。


