こんにちは。ECF Tech
ブログ担当 Michiharu.Tです。
Javaプログラミング向け練習問題、オブジェクト指向プログラミング編。久しぶりの更新になってしまいました。今回は例外がテーマです。例外の基本的な内容を一通り確認できる問題構成となっています。ぜひ普段の学習にお役立てください。
一般的なJavaの学習順序に沿ったテーマの一覧(※随時追加)は、こちらのリンクよりご確認頂けます。

Javaのトピックスです。主に初心者向けにプログラミング学習ネタを提供していきます。
解説動画
2023/06/19 解説動画を掲載しました。
問題編
Q001
問題
下の仕様に基づいてプログラムを修正し、実行結果の各パターンを得てください。
(仕様)
提供コードで発生する可能性のある例外に対して次のように処理します。
- java.lang.ArrayIndexOutOfBoundsExceptionが発生した場合
「引数の数が足りません」と表示します。 - java.lang.NumberFormatExceptionが発生した場合
「引数はそれぞれ数値でなければいけません」と表示します。
提供コード
public class Main{
public static void main(String[] args){
int x = Integer.parseInt(args[0]);
int y = Integer.parseInt(args[1]);
System.out.println(x+y);
}
}
実行結果(実行時コマンド含む)
パターン1
>java Main 引数の数が足りません
パターン2
>java Main a b 引数はそれぞれ数値でなければいけません
パターン3
>java Main 5 8 13
Q002
問題
下の仕様に基づいてプログラムを修正し、実行結果の各パターンを得てください。
(仕様)
提供コードで発生する可能性のある例外に対して次のように処理します。
- java.lang.ArithmeticExceptionが発生した場合
「不正な計算を行いました」と表示します。 - 上記以外の例外が発生した場合
「引数は2つの数値を指定してください」と表示します。 - 例外発生の有無に関わらず、最後に「プログラムを終了します」と表示する
提供コード
public class Main{
public static void main(String[] args){
int x = Integer.parseInt(args[0]);
int y = Integer.parseInt(args[1]);
System.out.println(x/y);
}
}
実行結果(実行時コマンド含む)
パターン1
>java Main 引数は2つの数値を指定してください プログラムを終了します
パターン2
>java Main 5 0 不正な計算を行いました プログラムを終了します
パターン3
>java Main 10 5 2 プログラムを終了します
Q003
問題
下の仕様に基づいてプログラムを修正し、実行結果を得てください。
(仕様)
提供コードで発生する可能性のある例外に対して次のように処理します。
-
loadFileメソッド
- throws宣言を使って、java.io.FileNotFoundExceptionが発生することを明示します。
-
mainメソッド
- java.io.FileNotFoundExceptionが発生した場合
「ファイルを読込できません」と表示します。
- java.io.FileNotFoundExceptionが発生した場合
提供コード
import java.io.FileReader;
import java.io.FileNotFoundException;
public class Main{
public static void main(String[] args){
loadFile();
}
public static void loadFile(){
FileReader fr = new FileReader("notfound.txt");
}
}
実行結果(実行時コマンド含む)
パターン1(同一フォルダ内にnotfound.txtが無い場合)
>java Main ファイルを読込できません
パターン2(同一フォルダ内にnotfound.txtがある場合)
>java Main
※実行結果には何も表示されません。
Q004
問題
下の仕様に基づいて各メソッドを修正し、実行結果の各パターンを得てください。
(仕様)
-
getBMIメソッド
- 概要:身長(m)と体重(kg)からBMI値を求めます。
- 引数:
- weight:int型 体重(kg)
- height:double型 身長(m)
- 戻り値:double型 BMI値
- 処理詳細:
- BMI = 体重÷(身長×身長)の式に当てはめ、BMI値を求めます。
- 引数に負の数が与えられた場合は、java.lang.IllegalArgumentExceptionを発生させ、呼び出し元にスローします。
メッセージは「負の数を用いることはできません」とします。
-
mainメソッド
- java.lang.IllegalArgumentExceptionが発生した場合
例外インスタンスのgetMessageメソッドを呼び出して取得した値を表示します。 - それ以外の例外が発生した場合
「2つの数値を指定してください」と表示します。
- java.lang.IllegalArgumentExceptionが発生した場合
提供コード
public class Main{
public static void main(String[] args){
double weight = Double.parseDouble(args[0]);
double height = Double.parseDouble(args[1]);
System.out.println( "BMI = " + getBMI(weight,height) );
}
public static double getBMI(double weight, double height){
return weight / ( height * height );
}
}
実行結果(実行時コマンド含む)
パターン1
>java Main 2つの数値を指定してください
パターン2
>java Main -50 -100 負の数を用いることはできません
パターン3
java Main 65 1.7 BMI = 22.49134948096886
Q005
問題
下の仕様に基づいて各クラスの作成・修正をし、実行結果の各パターンを得てください。
(仕様)
業務上のエラーを表すクラスBusinessExceptionクラスを作成します。Exceptionクラスを継承して作成します。
- コンストラクタの作成
- message:String型 エラーメッセージ
- 処理内容:引数messageの値を、親クラスのコンストラクタの引数にして実行します。
製品を表すProductクラスを作成します。
- フィールド
- name:String型 商品名を表します。
- price:int型 価格を表します。
- コンストラクタ
- 引数
- name:String型
- price:int型
- 処理内容:引数で与えられた値を、同名のフィールドに代入します。
- 引数
- toStringメソッド
- 引数:なし
- 戻り値:String型
- 処理内容:name、priceフィールドを用いて「XXXX:YYY円」と表示します。
※ XXXXはnameフィールド、YYYはpriceフィールドを表します。
製品を管理するProductManagerクラスを修正します。
- searchProductメソッド
- 修正内容:引数で指定した名前の商品が存在しない場合、nullを返す代わりに、BusinessExceptionをthrowします。メッセージは「該当する商品がありません」とします。
提供コード
(ProductManager.java)
public class ProductManager{
public static Product[] products = {
new Product("りんご",150),
new Product("みかん",200),
new Product("バナナ",100),
new Product("ぶどう",250),
new Product("キウイ",150),
};
public static Product searchProduct( String name ){
for( int i = 0; i < products.length; i++){
if( products[i].name.equals(name) ){
return products[i];
}
}
//商品が存在しない。
return null;
}
}
(Main.java)
public class Main{
public static void main(String[] args){
try{
System.out.println( ProductManager.searchProduct("りんご") );
System.out.println( ProductManager.searchProduct("メロン") );
} catch( BusinessException e ){
System.out.println( e.getMessage() );
}
}
}
実行結果
りんご:150円 該当する商品がありません
解答編
それでは、解答編です。
Q001
(Main.java)
public class Main{
public static void main(String[] args){
try{
int x = Integer.parseInt(args[0]);
int y = Integer.parseInt(args[1]);
System.out.println(x+y);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("引数の数が足りません");
} catch (NumberFormatException e) {
System.out.println("引数はそれぞれ数値でなければいけません");
}
}
}
Q002
(Main.java)
public class Main{
public static void main(String[] args){
try{
int x = Integer.parseInt(args[0]);
int y = Integer.parseInt(args[1]);
System.out.println(x/y);
} catch (ArithmeticException e) {
System.out.println("不正な計算を行いました");
} catch (Exception e) {
System.out.println("引数は2つの数値を指定してください");
} finally {
System.out.println("プログラムを終了します");
}
}
}
Q003
(Main.java)
import java.io.FileReader;
import java.io.FileNotFoundException;
public class Main{
public static void main(String[] args){
try{
loadFile();
} catch(FileNotFoundException e){
System.out.println("ファイルを読込できません");
}
}
public static void loadFile() throws FileNotFoundException{
FileReader fr = new FileReader("notfound.txt");
}
}
Q004
(Main.java)
public class Main{
public static void main(String[] args){
try{
double weight = Double.parseDouble(args[0]);
double height = Double.parseDouble(args[1]);
System.out.println( "BMI = " + getBMI(weight,height) );
} catch( IllegalArgumentException e ){
System.out.println( e.getMessage() );
} catch( Exception e ){
System.out.println("2つの数値を指定してください");
}
}
public static double getBMI(double weight, double height) throws IllegalArgumentException{
if( weight <= 0 || height <= 0 ){
throw new IllegalArgumentException("負の数を用いることはできません");
}
return weight / ( height * height );
}
}
Q005
(Product.java)
public class Product{
String name;
int price;
Product(String name, int price){
this.name = name;
this.price = price;
}
public String toString(){
return this.name + ":" + this.price + "円";
}
}
(BusinessException.java)
public class BusinessException extends Exception{
public BusinessException(String message){
super(message);
}
}
(ProductManager.java)
public class ProductManager{
public static Product[] products = {
new Product("りんご",150),
new Product("みかん",200),
new Product("バナナ",100),
new Product("ぶどう",250),
new Product("キウイ",150),
};
public static Product searchProduct( String name ) throws BusinessException{
for( int i = 0; i < products.length; i++){
if( products[i].name.equals(name) ){
return products[i];
}
}
throw new BusinessException("該当する商品がありません");
}
}
おわりに
本日は以上となります。最後までご覧くださりありがとうございます。例外処理は業務システムではとても大事なスキルとなります。例外の基礎練習としてご活用ください。ひきつづき、問題の提供をしていければと思っています。今後もよろしくお願いいたします。
[PR]
Javaをもっと詳しく学びたい!という方には、下の書籍がおススメです!筆者も愛用しています。



