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;

Javaクラスライブラリの中から「java.util.Scanner」というパッケージにあるクラスを使うために記述しています。

003
public class Clamp0 {

クラス名を、Clamp0としています。

004
005
	// メインメソッド
	public static void main( String[] args ) {

このmainメソッドからプログラムを実行します。

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 ) );

clampメソッド引数minvalue、maxvalue、valueを渡した結果を出力しています。

Math.clampメソッドの仕様は以下のとおりです。

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;

Javaクラスライブラリの中から「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 )
	{

ここからクランプメソッドです。

値の範囲の最小値minvalue、最大値maxvalueと値valueをメソッドに渡すと、範囲内に収めた値を戻します。

このメソッドでは、最小値minvalueが最大値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 ) {

このmainメソッドからプログラムを実行します。

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 ) );

clampメソッド引数minvalue、maxvalue、valueを渡した結果を出力しています。

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;

Javaクラスライブラリの中から「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 )
	{

ここからクランプメソッドです。

値の範囲の最小値minvalue、最大値maxvalueと値valueをメソッドに渡すと、範囲内に収めた値を戻します。

このメソッドでは、最小値minvalueが最大値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 ) {

このmainメソッドからプログラムを実行します。

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 ) );

clampメソッド引数minvalue、maxvalue、valueを渡した結果を出力しています。

以上です。

クランプに関するコンテンツ

クランプ」に関係があるコンテンツをまとめています。

関連コンテンツ

変数やクラスに格納されている値をコンソール出力する方法は?

2020.03.23

プログラムの最初に実行されるメソッドは?

2022.12.13

プログラミングで使う変数って何?

2020.03.23

Javaのプログラムを書いてみませんか?プログラムの書き方をくわしく説明しています。

2020.03.23

「Javaソースコード」から実行可能な「オブジェクトコード」に変換する方法をくわしく説明しています。

2020.03.23

条件式を判断して処理を分岐する方法を詳しく説明しています。

2023.03.20

メソッドを抜けるときに使用するreturn文について説明しています。

2020.03.20

Javaのプログラムを作ってみませんか?プログラミングに必要なものの用意から実行までを説明しています。

2020.03.23

Javaプログラムを作るための環境構築の仕方を解説しています

2024.09.17

計算の仕方、変数の利用、繰り返し処理、分岐処理、文字列など、Javaプログラムの基本について説明しています

2020.03.23

Javaの学習に役立つソースコードを多数紹介しています。是非、ご覧ください。

2022.09.10

Swingパッケージを使ってグラフィック表示を行う方法を解説しています。

2020.03.23

画像フォーマット形式・色・大きさ・傾きなどの変更、特定の図形(文字・記号など)を見つけたり、取り出したりする画像処理について詳しく解説。

2015.11.29

繰り返し処理を使ったJavaのソースコードサンプルを紹介しています。

2020.03.23

配列を使うJavaソースコードを多数紹介しています。

2021.05.18

数学に関係するJavaのメソッドやソースコードなどを紹介しています。

2022.10.25

三角形、台形、円などいろいろな図形の面積を計算するプログラムを紹介しています。詳しくは、記事をご覧ください。

2021.05.18

StringクラスとStringBuilderクラスを利用したプログラミングの仕方を紹介しています。

2016.12.16

いろいろなJavaのソースコードで、日付と時間を取り扱う方法を解説します

2022.12.19

Javaを使った簡単な応用プログラム(生年月日から年齢を計算プログラムなど)を紹介しています。

2022.07.07

プログラミングに関係がある情報を紹介しています。色情報の考え方、文字コード、2進数、画像フォーマットなどについて解説しています

2023.05.27

プログラミング、ITに関する用語をまとめています。

2022.10.17

日本で使われてきた伝統文様「和柄」について解説しています。

2022.07.27

レベルごとに分けられた英単語と日本語の意味の一覧表、英語を見て日本語を当てるクイズ、日本語を見て英語を当てるクイズなどを掲載しています

2025.04.26

そもそもプログラミングってどういう意味?

2022.08.09

2つの値のうち、小さい方の値と、大きい方の値を取得する方法。

2020.03.23

メソッドの定義方法を詳しく解説しています。Javaのサンプルソースコードを使った説明もあります。

2020.03.23

プログラミング言語とは?種類や特徴について説明しています。

2022.08.03

Javaプログラムの構成について解説しています。詳しくは、こちらをご覧ください。

2020.03.23

プログラムとは?

2025.02.15

キーボードを使って実数値(double)を入力する方法を解説しています。Scannerクラスを利用しています。

2023.03.09

for文で変数名iがよく使われる理由について説明しています。興味のある方は是非。

2022.08.29

文字列の途中で改行する方法って?詳しくは、記事を。

2021.02.02

「ゆるゆるプログラム」のコンテンツを紹介しています。興味のある方はこの記事をご覧ください。

2020.03.23

広告