• 検索結果がありません。

オブジェクト指向プログラミング・同演習 5月21日演習課題

N/A
N/A
Protected

Academic year: 2021

シェア "オブジェクト指向プログラミング・同演習 5月21日演習課題"

Copied!
5
0
0

読み込み中.... (全文を見る)

全文

(1)

オブジェクト指向プログラミング・同演習 5月21日演習課題 問題1 配列の例外処理 例外が発生する可能性のある処理をtry で囲み、 その後に catch で例外を捕捉します。 例外処理の 終了処理としてfinally が行われます。これは書かなくて自動的に行われます。 提出課題 1 (Kadai052301.java) 以下のプログラムは例外処理をしていない。ArrayIndexOutOfBoundsException の例外を捕捉し、 更に、数以外のものが入力された場合の例外( NumberFormatException )の処理を 付け加えよ。 /* Kadai052101.java 整数値を入力して、合計値を出力する。 */ import java.io.IOException; import java.io.BufferedReader; import java.io.InputStreamReader; import java.lang.ArrayIndexOutOfBoundsException; public class Kadai052301{

public static void main(String[] args) throws IOException { int[] array = new int[5];

BufferedReader buf = new BufferedReader(new InputStreamReader(System.in)); int ind = 0; int num = 0; while(true){ System.out.print("整数値を入力して下さい >>"); num = Integer.parseInt(buf.readLine()); array[ind] = num; ind++; } } } 実行例 $java Kadai052301 整数値を入力して下さい >>1 整数値を入力して下さい >>2 整数値を入力して下さい >>3 整数値を入力して下さい >>4 整数値を入力して下さい >>5 整数値を入力して下さい >>6 データ数が配列サイズを超えました 合計値は15 です 問題2 入出力 Java には、外部からデータを受け取り処理をするためのパッケージが用意されています。 クラスを 集めてたクラス群は、パッケージと呼ばれます。Java 言語は、似たようなクラスを パッケージごとに 整理してまとめ、クラスライブラリとして提供しています。 入出力を行うクラスは、文字データと一般的なバイトデータに分かれます。 ここでは、Write クラスと Reader クラスのサブクラスを扱います。

(2)

入出力クラス 扱うデータ 出力 入力 文字 Writer Reader バイト OutputStream InputStream 提出課題 2 (Kadai052302.java) 以下のサンプルプログラムは、標準入力から入力された1 行のみを ファイル名 outdata.txt に出力す るプログラムである。 標準入力で出力するファイル名を指定し、 zzzz が入力されるまで複数行の標準 入力をよみこみ ファイルに出力できるように書き換えよ。但し、ファイルに zzzz は出力しない。 /* Kadai052302.java 標準入力からデータを入力し、指定したファイル名にデータを出力する */ import java.io.IOException; import java.io.PrintWriter; import java.io.BufferedReader; import java.io.InputStreamReader; public class Kadai052302 {

public static void main(String[] args) { try {

String fname = "outdata.txt";

PrintWriter pw = new PrintWriter(fname); String str; str = buf.readLine(); pw.println(str); pw.close(); } catch(IOException e){ e.printStackTrace(); } } } 実行例 $java Kadai052302 書き込むファイル名を指定してください>>text.txt my name zzzz $more text.txt my name 問題3 ファイルからデータを読み込み、標準出力するプログラム 提出課題 3 (Kadai052303.java) ファイルからデータを読み込む場合は、ファイルが存在しない場合 FileNotFoundException の例外 が発生するため、この例外を捕捉するための 例外処理が必要になる。以下のプログラムは、ファイル 名outdata.txt 指定し最初の 1 行を読み込んで終了する。 しかし、例外処理が入っていないのでコンパ イル出来ない。 そこで、FileNotFoundException、IOException が捕捉出来るように 例外処理を書き 加えよ。

(3)

/* Kadai052303.java ファイルからデータを取得し、指定したファイル名にデータを出力する */ import java.io.IOException; import java.io.BufferedReader; import java.io.FileReader; import java.io.FileNotFoundException; public class Kadai052303 {

public static void main(String[] args) {

FileReader fr = new FileReader("outdata.txt"); BufferedReader br = new BufferedReader(fr); String str; str = br.readLine(); System.out.println(str); br.close(); } } 問題4 追加課題(OKadai052301.java) 以下のプログラムは、2 つ数の計算をする電卓プログラムである 以下の仕様になるように Calc.java に例外処理付け加えてプログラムを完成させよ。 プログラムは以下のものとする。 • メインのクラス(Okadai052301.java)は、計算する式の入力を受けつけるメインプログラムは変更 しない。 • Calc クラス(Calc.java)は入力された文字列を処理し、演算を行い演算時の例外処理をする。 • 演算子チェック部分で、演算子が入っていない場合に独自例外の OpException を発生する。 • ゼロで割り算した場合は、ArithmeticException の例外を生成し、捕捉できるようにする • 入力が数でない場合は、NumberFormatException 例外を捕捉する • OpException クラス(OpException.java)は独自の例外クラスを定義する。 • OpException クラスは変更しない。 /* --- メインのクラス OKadai052301.java 四則演算を行うクラスを作成して、例外処理を行う 演算クラスで、数を 2 つと演算子を 1 つ入力して 演算子合わせた数の演算を行う --- */ import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException;

public class OKadai052301 {

public static void main(String[] args) { Calc calc = new Calc();

try {

BufferedReader br =

new BufferedReader(new InputStreamReader(System.in)); System.out.println("計算式を入力してください (例)3*2");

(4)

System.out.println( calc.arithmetic( br.readLine() ) ); } catch(IOException e){ e.printStackTrace(); } } } /* Calc.java ゼロ割した場合の処理を付け加える 入力した式が不正な場合の独自例外を定義する d1, d2 : 入力された行を演算子の左右に分解したときの二つの数を代入する result : 計算結果を代入する変数 arithmetic():演算子をチェックして、二つの数と演算子に分解する */

public class Calc{ private String[] str; private d1,d2, result; Calc(){

d1=0.0; d2 =0.0; result=0.0; }

public double arithmetic(String input) { // 演算子のチェック char op_char = ' '; if ( input.indexOf('*') != -1) { op_char = '*'; } else if ( input.indexOf('/') != -1) { op_char = '/';

} else if( input.indexOf('+') != -1) { op_char = '+';

} else if( input.indexOf('-') != -1) { op_char = '-'; } else if(input.indexOf('%') !=-1) { op_char = '%'; } // 入力の演算子の前までの切り抜き str[0] = input.substring( 0, input.indexOf(op_char)); // 入力の演算子の後ろから最後まで切り抜き

str[1] = input.substring( input.indexOf(op_char)+1, input.length() ); // 演算子の前と後ろの文字列を数値に置き換えて演算する d1 = Double.parseDouble(str[0]); d2 = Double.parseDouble(str[1]); switch(op_char) { case '*': result = d1*d2; break; case '/': result = d1/d2; break; case '+': result = d1+d2; break; case '-':

(5)

result = d1-d2; break; } } return result; } } /* OpException.java 独自の例外クラス 演算子が入っていない場合に用いる */

class OpException extends Exception { String message;

OpException(String message){ this.message = message; }

public void printmessage(){ System.out.println(message); } } 実行例 $java OKadai052301 計算式を入力してください (例)3*2 5*2 10.0 $java OKadai052301 計算式を入力してください (例)3*2 *0 正しく式を入力してください 0.0 $java OKadai052301 計算式を入力してください (例)3*2 10 演算子も入れてください 0.0 追加課題(OKadai052302.java) Kadai052303.java を改良し、 ファイル名を指定してテキストファイルを最後まで自動的に読み込め るよう にせよ。ファイルの終端を調べるには br.readLine() != null とすると、ファイルの終端かどうか判定できる。

参照

関連したドキュメント

1号機 2号機 3号機 4号機 5号機

入庫 出庫 残 日付 入庫 出庫 残 日付 入庫 出庫 残.

(2)

理由:ボイラー MCR範囲内の 定格出力超過出 力は技術評価に て問題なしと確 認 済 み で あ る が、複数の火力

Dual I/O リードコマンドは、SI/SIO0、SO/SIO1 のピン機能が入出力に切り替わり、アドレス入力 とデータ出力の両方を x2

「AI 活用データサイエンス実践演習」 「AI

「PTA聖書を学ぶ会」の通常例会の出席者数の平均は 2011 年度は 43 名だったのに対して、2012 年度は 61 名となり約 1.5

「PTA聖書を学ぶ会」の通常例会の出席者数の平均は 2011 年度は 43 名、2012 年度は 61 名、2013 年度は 79 名、そして 2014 年度は 84