Java の入門からマスターまでの章の演習 - 第 9 章

Java の入門からマスターまでの章の演習 - 第 9 章

演習 1

総合的な演習 1: 境界外の例外を発生させる 境界外の例外 (IndexOutOfBoundsException) を生成する簡単なプログラムを作成します。

package org.hj.chapter9;

import java.util.ArrayList;

public class IndexOutOfBoundsException {
    
    

    /**
     * 综合练习1:引发越界异常 编写一个简单的程序,使之产生越界异常(IndexOutOfBounds Exception)。
     */

    public static void main(String[] args) {
    
    
        ArrayList<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        //直接引用不存在的元素时产生
        System.out.println(list.get(3));
    }
}

演習 2

総合演習 2: データ型変換例外 データ型変換例外 (NumberFormatException) を生成する簡単なプログラムを作成します。

package org.hj.chapter9;

public class NumberFormatException {
    
    

    /**
     * 综合练习2:数据类型转换异常 编写一个简单程序,使之产生数据类型转换异常(NumberFormatException)。
     */

    public static void main(String[] args) {
    
    

        String a = "123 ";//有空格
        String b = "123.123";//小数
        String c = "123*";//带符号
        System.out.println(Integer.parseInt(a));
        System.out.println(Integer.parseInt(b));
        System.out.println(Integer.parseInt(c));

    }
}

演習 3

総合的な演習 3: 配列で例外が発生しました コンソール上で整数配列の走査プロセス (「int a[] = { 1, 2, 3, 4 };」など) を簡単に説明し、値が変化したときにそれを示します。 of i は、例外がどのくらいの頻度で発生しますか?また、それはどのようなタイプですか?

package org.hj.chapter9;

public class ArrayException {
    
    

    /**
     * 综合练习3:数组发生的异常 在控制台上简述一个整型数组(如"int a[] = { 1, 2, 3, 4 };")遍历的过程;
     * 并体现出当i的值为多少时,会产生异常,异常的种类是什么?
     */

    public static void main(String[] args) {
    
    
        int arr[] = {
    
    1,2,3,4,5};
        int i = 0;
        try {
    
    
            for (i = 0; i >= 0; i++) {
    
    
                System.out.println(arr[i]);
            }
        } catch (Exception e) {
    
    
            System.out.println("遍历数组发生异常" + "i = " + i);
            e.printStackTrace();
        }
    }
}

演習 4

総合的な演習 4: 乗算によって発生する例外 Number クラスを作成し、クラス内でメソッド count() を使用して、データ型が int の 2 つの整数を乗算した結果を取得し、呼び出すメイン メソッドで try-catch ステートメントを使用します。このメソッドは、12315 回 57876876 個の可能な例外をキャッチします。

package org.hj.chapter9;

public class MultiplicationException {
    
    

    /**
     * 综合练习4:乘法引发的异常 创建Number类,通过类中的方法count()可得到两个数据类型为int型的整数相乘后的结果,
     * 在调用该方法的主方法中使用try-catch语句捕捉12315乘以57876876可能发生的异常。
     */

    public static void main(String[] args) {
    
    
        Number number = new Number();
        try {
    
    
            int count = number.count(12315, 57876876);
            System.out.println("计算结果为" + count);
        } catch (Exception e) {
    
    
            System.out.println("计算异常,发生溢出");
        }

    }
}

class Number {
    
    

    public int count(int a, int b) throws Exception{
    
    
        int result = a * b;
        if (result < 0) {
    
    
            throw new Exception("乘法溢出,请使用更大的单位");
        }
        return result;
    }
}

演習 5

総合演習 5: 除数を 0 にすることはできません 静的変数、静的メソッド、および throws キーワードを使用して、2 つの数値を除算して除数が 0 の場合、プログラムはスローされた ArithmeticException (算術例外) をキャッチして処理することを理解します。

package org.hj.chapter9;

public class ArithmeticException {
    
    

    /**
     * 综合练习5:除数不能为0 使用静态变量、静态方法以及throws关键字,实现当两个数相除且除数为0时,
     * 程序会捕获并处理抛出的ArithmeticException异常(算术异常),运行结果如图9.9所示。
     */

    public static void main(String[] args) {
    
    
        try {
    
    
            int a = 1/0;
        } catch (Exception e) {
    
    
            throw new RuntimeException(e);
        }
    }
}

演習 6

総合演習 6: 年齢形式の検証 ユーザーが入力した名前と年齢を取得する情報入力プログラムを作成します。ユーザーが入力した年齢が正しい年齢番号 (0.5 など) でない場合は、例外がスローされ、ユーザーは再入力を求められます。年齢が正しければ、ユーザーが入力した情報が出力されます。

package org.hj.chapter9;

import java.util.Scanner;

public class VerifyAgeFormat {
    
    

    /**
     * 综合练习6:校验年龄格式 编写一个信息录入程序,获取用户输入的姓名和年龄。
     * 如果用户输入的年龄不是正确的年龄数字(如0.5),则抛出异常并让用户重新输入;
     * 如果年龄正确,则打印用户输入的信息。
     */

    public static void main(String[] args) {
    
    
        Scanner scanner = new Scanner(System.in);
        String name = null;
        int age = 0;
        while (true) {
    
    
            System.out.print("请输入姓名:");
            name = scanner.nextLine();
            try {
    
    
                System.out.print("请输入年龄:");
                //将输入的数据转换成int类型,转换成功则格式正确,失败则抛出一场
                age = Integer.parseInt(scanner.nextLine());
                if (age < 0 || age > 200) {
    
    
                    throw new RuntimeException("年龄不合法,请重新输入");
                }
                break;
            } catch (Exception e) {
    
    
                //
                System.out.println("年龄格式不正确,请重新输入");
            }
        }
        System.out.println("姓名:" + name + ",年龄:" + age);
    }
}

演習 7

総合的な演習 7: ループの解消 for ループを使用してコンソールに 0 から 9 を出力するコードを作成します。コードでは次の 2 つの関数を実装する必要があります: ループ変数の値が 2 の場合、例外がスローされてループは中断されます。ループ変数の値が 2 の場合、例外はスローされますが、ループは中断されません。中断される。

package org.hj.chapter9;

public class BreakLoop {
    
    

    /**
     * 综合练习7:中断循环 编写使用for循环在控制台上输出0~9的代码。
     * 代码要实现以下两个功能:当循环变量的值为2时,抛出异常,循环中断;
     * 当循环变量的值为2时,虽然会抛出异常,但是循环不会中断。
     */

    public static void main(String[] args) throws Exception{
    
    

        for (int i = 0; i < 10; i++) {
    
    
            if (i == 2) {
    
    
                throw new Exception("循环变量的值为2时,抛出异常,循环中断");
            }
            System.out.println(i);
        }

//        for (int i = 0; i < 10; i++) {
    
    
//            try {
    
    
//                if (i == 2) {
    
    
//                    System.out.println("i值等于" + i);
//                }
//            } catch (Exception e) {
    
    
//                throw new RuntimeException("抛出一场:i值等于" + i);
//            }
//            System.out.println(i);
//        }
    }
}

演習 8

総合的な演習 8: 最大公約数を計算する 2 つの数値の最大公約数を計算するメソッドを持つ Computer クラスを作成します。負の整数がこのメソッドに渡されると、メソッドはカスタム例外をスローします。

package org.hj.chapter9;

public class CommonDivisor {
    
    

    /**
     * 综合练习8:计算最大公约数 创建Computer类,该类中有一个计算两个数的最大公约数的方法,
     * 如果向该方法传递负整数,该方法就会抛出自定义异常。
     */

    public static void main(String[] args) {
    
    

        int i = new Computer().calculateCommonDivisor(9, 100);
        System.out.println(i);
    }
}

class Computer {
    
    

    public int calculateCommonDivisor(int a, int b) {
    
    
        if (b == 0) {
    
    
            return a;
        }
        //递归调用该方法
        return calculateCommonDivisor(b, a % b);
    }
}

おすすめ

転載: blog.csdn.net/dedede001/article/details/130290457