Java における剰余演算子

JavaBeginner
オンラインで実践に進む

はじめに

剰余演算子は、2 つの数の除算の余りを求めるために使用される数学演算子です。この演算子は % の記号で表されます。Java では、剰余演算子は最初の数を 2 番目の数で割った余りを返します。この実験では、この演算子のいくつかの使用例を案内します。

剰余演算子の例

このステップでは、剰余演算子の基本構文と、整数型と浮動小数点数型の変数でどのように使用できるかを見ていきます。また、負の数をどのように扱うかも見ていきます。

  1. touch コマンドを使用して、ModuloOperatorDemo.java という名前の新しいファイルを作成します。
  2. nano などのテキストエディタでファイルを開きます。
  3. 次のコードをファイルに追加します。
public class ModuloOperatorDemo
{
    public static void main(String[] args)
    {
        System.out.println("10 % 3 = " + 10 % 3);
        System.out.println("3 % 10 = " + 3 % 10);
        System.out.println("10.0 % 3.0 = " + 10.0 % 3.0);
        System.out.println("10.0 % 3 = " + 10.0 % 3);
        System.out.println("-10 % 3 = " + -10 % 3);
    }
}
  1. ファイルを保存して、テキストエディタを終了します。
  2. javac ModuloOperatorDemo.java コマンドを使用してコードをコンパイルします。
  3. java ModuloOperatorDemo コマンドを使用してコードを実行します。
  4. コードは次のように出力されるはずです。
10 % 3 = 1
3 % 10 = 3
10.0 % 3.0 = 1.0
10.0 % 3 = 1.0
-10 % 3 = -1

剰余演算子の必要性

このステップでは、除算演算子を使用する際に剰余演算子が必要な理由について説明します。

  1. テキストエディタで ModuloOperatorDemo.java ファイルを開きます。
  2. 既存のコードを削除し、次のコードで置き換えます。
public class ModuloOperatorDemo
{
    public static void main(String[] args)
    {
        int dividend = 10;
        int divisor = 3;
        int remainder = dividend - (divisor * (dividend/divisor));
        System.out.print("The remainder is: " + remainder);
    }
}
  1. ファイルを保存して、テキストエディタを終了します。
  2. javac ModuloOperatorDemo.java コマンドを使用してコードをコンパイルします。
  3. java ModuloOperatorDemo コマンドを使用してコードを実行します。
  4. コードは次のように出力されるはずです。
The remainder is: 1

被除数または除数が整数でない場合

このステップでは、剰余演算子が小数をどのように扱うかを見ていきます。

  1. テキストエディタで ModuloOperatorDemo.java ファイルを開きます。
  2. 既存のコードを削除し、次のコードで置き換えます。
public class ModuloOperatorDemo
{
    public static void main(String[] args)
    {
        double dividend = 10;
        int divisor = 3;
        double remainder = dividend - (divisor * (dividend/divisor));
        System.out.print("The remainder is: " + remainder);
    }
}
  1. ファイルを保存して、テキストエディタを終了します。
  2. javac ModuloOperatorDemo.java コマンドを使用してコードをコンパイルします。
  3. java ModuloOperatorDemo コマンドを使用してコードを実行します。
  4. コードは次のように出力されるはずです。
The remainder is: 0.0
  1. ファイル内のコードを次のように変更します。
public class ModuloOperatorDemo
{
    public static void main(String[] args)
    {
        double dividend = 10;
        int divisor = 3;
        double remainder = dividend % divisor;
        System.out.print("The remainder is: " + remainder);
    }
}
  1. ファイルを保存して、テキストエディタを終了します。
  2. javac ModuloOperatorDemo.java コマンドを使用して再コンパイルします。
  3. java ModuloOperatorDemo コマンドを使用してコードを実行します。
  4. コードは今度は次のように出力されるはずです。
The remainder is: 1.0

剰余演算子による ArithmeticException

このステップでは、除数がゼロの場合、剰余演算子がどのように例外をスローするかを見ていきます。

  1. テキストエディタで ModuloOperatorDemo.java ファイルを開きます。
  2. 既存のコードを削除し、次のコードで置き換えます。
public class ModuloOperatorDemo
{
    public static void main(String[] args)
    {
        System.out.print("The remainder is: " + 10 % 0);
    }
}
  1. ファイルを保存して、テキストエディタを終了します。
  2. javac ModuloOperatorDemo.java コマンドを使用してコードをコンパイルします。
  3. java ModuloOperatorDemo コマンドを使用してコードを実行します。
  4. コードは次のように ArithmeticException をスローするはずです。
Exception in thread "main" java.lang.ArithmeticException: / by zero
        at ModuloOperatorDemo.main(ModuloOperatorDemo.java:3)

偶数を見つける

このステップでは、剰余演算子を使って数が偶数か奇数かをチェックする方法を見ていきます。

  1. テキストエディタで ModuloOperatorDemo.java ファイルを開きます。
  2. 既存のコードを削除し、次のコードで置き換えます。
public class ModuloOperatorDemo
{
    public static void main(String[] args)
    {
        int[] arr = {7, 5, 2, 4, 6, 19, 18, 25, 22};
        for(int i=0; i<arr.length; i++)
        {
            int num = arr[i];
            if((num % 2) == 0)
                System.out.println(num + " is even.");
            else
                System.out.println(num + " is NOT even.");
        }
    }
}
  1. ファイルを保存して、テキストエディタを終了します。
  2. javac ModuloOperatorDemo.java コマンドを使用してコードをコンパイルします。
  3. java ModuloOperatorDemo コマンドを使用してコードを実行します。
  4. コードは次のように出力されるはずです。
7 is NOT even.
5 is NOT even.
2 is even.
4 is even.
6 is even.
19 is NOT even.
18 is even.
25 is NOT even.
22 is even.

秒を分と秒に変換する

このステップでは、剰余演算子を使って秒を分と秒に変換する方法を見ていきます。

  1. テキストエディタで ModuloOperatorDemo.java ファイルを開きます。
  2. 既存のコードを削除し、次のコードで置き換えます。
public class ModuloOperatorDemo
{
    public static void main(String[] args)
    {
        int seconds = 401;
        int minutes = seconds / 60;
        int remainingSeconds = seconds % 60;
        System.out.print(seconds + " seconds is equal to " + minutes +" minutes " + remainingSeconds + " seconds");
    }
}
  1. ファイルを保存して、テキストエディタを終了します。
  2. javac ModuloOperatorDemo.java コマンドを使用してコードをコンパイルします。
  3. java ModuloOperatorDemo コマンドを使用してコードを実行します。
  4. コードは次のように出力されるはずです。
401 seconds is equal to 6 minutes 41 seconds

整数の各桁を取得する

このステップでは、剰余演算子を使って数値から各桁を抽出する方法を見ていきます。

  1. テキストエディタで ModuloOperatorDemo.java ファイルを開きます。
  2. 既存のコードを削除し、次のコードで置き換えます。
public class ModuloOperatorDemo
{
    public static void main(String[] args)
    {
        int num = 7912064;
        while(num > 0)
        {
            int lastDigit = num % 10;
            num = num / 10;
            System.out.print(lastDigit + " ");
        }
    }
}
  1. ファイルを保存して、テキストエディタを終了します。
  2. javac ModuloOperatorDemo.java コマンドを使用してコードをコンパイルします。
  3. java ModuloOperatorDemo コマンドを使用してコードを実行します。
  4. コードは次のように出力されるはずです。
4 6 0 2 1 9 7

何かを n 回目ごとに繰り返す

このステップでは、剰余演算子を使って n 回目に何かを繰り返す方法を見ていきます。

  1. テキストエディタで ModuloOperatorDemo.java ファイルを開きます。
  2. 既存のコードを削除し、次のコードで置き換えます。
public class ModuloOperatorDemo
{
    public static void main(String[] args)
    {
        for(int i = 1; i <= 30; i++)
        {
            if(i % 5 == 0)
                System.out.println("Do Something");
        }
    }
}
  1. ファイルを保存して、テキストエディタを終了します。
  2. javac ModuloOperatorDemo.java コマンドを使用してコードをコンパイルします。
  3. java ModuloOperatorDemo コマンドを使用してコードを実行します。
  4. コードは次のように出力されるはずです。
Do Something
Do Something
Do Something
Do Something
Do Something
Do Something

数値を特定の範囲に制限する

このステップでは、剰余演算子を使って数値を特定の範囲に制限する方法を見ていきます。

  1. テキストエディタで ModuloOperatorDemo.java ファイルを開きます。
  2. 既存のコードを削除し、次のコードで置き換えます。
public class ModuloOperatorDemo
{
    public static void main(String[] args)
    {
        String[] dayNames = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
        int dayOfTheMonth1 = 21;
        String dayName1 = dayNames[(dayOfTheMonth1 - 1) % 7];
        int dayOfTheMonth2 = 12;
        String dayName2 = dayNames[(dayOfTheMonth2 - 1) % 7];

        System.out.println(dayOfTheMonth1 + " occurs on " + dayName1);
        System.out.println(dayOfTheMonth2 + " occurs on " + dayName2);
    }
}
  1. ファイルを保存して、テキストエディタを終了します。
  2. javac ModuloOperatorDemo.java コマンドを使用してコードをコンパイルします。
  3. java ModuloOperatorDemo コマンドを使用してコードを実行します。
  4. コードは次のように出力されるはずです。
21 occurs on Sunday
12 occurs on Friday

ある数を別の数で完全に割り切れるようにする

このステップでは、剰余演算子を使ってある数を別の数で完全に割り切れるようにする方法を見ていきます。

  1. テキストエディタで ModuloOperatorDemo.java ファイルを開きます。
  2. 既存のコードを削除し、次のコードで置き換えます。
public class ModuloOperatorDemo
{
    public static void main(String[] args)
    {
        int X = 291;
        int Y = 17;

        int remainder = X % Y;
        X = X - remainder;
        System.out.println("The minimum number to subtract is: " + remainder);
        System.out.println("The number after subtraction is: " + X);
    }
}
  1. ファイルを保存して、テキストエディタを終了します。
  2. javac ModuloOperatorDemo.java コマンドを使用してコードをコンパイルします。
  3. java ModuloOperatorDemo コマンドを使用してコードを実行します。
  4. コードは次のように出力されるはずです。
The minimum number to subtract is: 2
The number after subtraction is: 289

まとめ

剰余演算子は、2 つの数の除算の余りを求めるために使用される数学演算子です。この実験では、剰余演算子のさまざまな使用例を扱いました。たとえば、数が偶数かどうかを確認したり、秒を分と秒に変換したり、個々の桁を抽出したり、n 回目に何かを繰り返したり、数値を特定の範囲に制限したり、ある数を別の数で完全に割り切れるようにしたりします。剰余演算子を使用する際には、除数がゼロにならないようにしてください。ゼロになると ArithmeticException がスローされます。