Java 中的取模运算符

JavaJavaBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

取模运算符(Modulo operator)是一种数学运算符,用于计算两个数相除后的余数。该运算符用符号 % 表示。在 Java 中,取模运算符返回第一个数除以第二个数后的余数。本实验将引导你了解该运算符的一些使用场景。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java(("Java")) -.-> java/DataStructuresGroup(["Data Structures"]) java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java/BasicSyntaxGroup -.-> java/operators("Operators") java/BasicSyntaxGroup -.-> java/variables("Variables") java/BasicSyntaxGroup -.-> java/if_else("If...Else") java/BasicSyntaxGroup -.-> java/for_loop("For Loop") java/BasicSyntaxGroup -.-> java/while_loop("While Loop") java/BasicSyntaxGroup -.-> java/output("Output") java/DataStructuresGroup -.-> java/arrays("Arrays") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/exceptions("Exceptions") subgraph Lab Skills java/operators -.-> lab-117974{{"Java 中的取模运算符"}} java/variables -.-> lab-117974{{"Java 中的取模运算符"}} java/if_else -.-> lab-117974{{"Java 中的取模运算符"}} java/for_loop -.-> lab-117974{{"Java 中的取模运算符"}} java/while_loop -.-> lab-117974{{"Java 中的取模运算符"}} java/output -.-> lab-117974{{"Java 中的取模运算符"}} java/arrays -.-> lab-117974{{"Java 中的取模运算符"}} java/exceptions -.-> lab-117974{{"Java 中的取模运算符"}} end

取模运算符示例

在这一步中,我们将了解取模运算符的基本语法,以及如何在整数和浮点数变量中使用它。我们还将看到它如何处理负数。

  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

总结

取模运算符是一种数学运算符,用于计算两个数相除后的余数。在本实验中,我们介绍了取模运算符的多种应用场景,例如检查一个数是否为偶数、将秒数转换为分钟和秒、提取数字的各个位数、每隔 n 次重复执行某个操作、将数字限制在特定范围内,以及使一个数能被另一个数完全整除。需要注意的是,在使用取模运算符时,除数不能为零,否则会抛出 ArithmeticException 异常。