[[TopPage]] > [[演習課題]] > 小課題 * Javaプログラミング演習の確認(まとめ) [#ebfdd1eb] ここで,演習1の理解度を確認するために,小課題を行います. みなさんの理解度を確認するために,課題のプログラムができたら,&size(16){''ソースコードを提出''してください.}; ※提出されたソースコードの出来は、最終評価の点数には関係しません.できるところまで,やってみてください. わからなければ,吉野またはTAに質問してください. *** 提出期限 [#n31860da] &size(16){提出先:以下の2人の TA のメールアドレスに".javaファイル"を添付して送ってください。};~ &size(16){件名:Javaプログラミング小課題-60226???(名前)};~ &br; &size(20){長田(TA,大学院1年): dedenne110@gmail.com};~ &size(20){梅本(TA,大学院1年): gorebyss368@gmail.com};~ ※メールの本文もちゃんと書くようにしましょう!書き方は調べれば出てきます.~ ※動作確認をして返信します.少し時間がかかるかもしれませんが待っていてください.一週間たっても返事がない場合,TAまで連絡をください. ** サンプルプログラムの紹介 [#p7f0b0f3] まず,以下のサンプルプログラムをダウンロードしてください. &ref(Ensyu.java,,,Ensyu.java ダウンロード);/[[ソースコードファイルを見る>http://yoslab.net/netprog/source/Ensyu.java]] サンプルプログラムを実行すると,以下のような表示が出ます. 現在の値: 0 命令を入力してください: ここで,何か値(例としてABC)を入力すると, 命令を入力してください: ABC 命令ABCは解釈できません. 現在の値は:0 と表示され,「命令を入力してください」に戻ります. EXITと入力すると,文字入力のループを終了します. ** 課題 [#t38e58a7] 命令文を入力すると,内部の値(現在値)が変わる計算プログラムを作成してください.~ 現在の値を表す変数名はvalueにしています. 具体的には, ADD 100 [Enterキー] と入力すると,プログラムの「現在の値」に100を加算します. 同様に, SUB 50 [Enterキー] と入力すると,プログラムの「現在の値」から50を減算します. このように,命令語と数値1つを与えると,プログラム内の「現在の値」を操作して,表示するプログラムを作成してください. - 入力する命令語は,以下の4つとします. --加算(ADD),減算(SUB),乗算(MUL),除算(DIV) - 各命令は,大文字でも小文字でも認識するようにしてください. - 例外エラーを考慮し,なるべくプログラムが止まらないようにしてみてください. -- 例えば,「0で割る」とエラーが発生します. &color(red,yellow){'' ヒント1 ''}; - この小課題でやってもらいたいことは,以下の2つです. + 命令文にある数値文字列を,数値(int型)に変換する処理 + 4つの命令語を認識し,適切な計算をする処理 サンプルプログラム中の適切な場所に, // (1) 2つ目の要素があれば,文字列から数値に変換する. のように,コメントを挿入していますので,参考にしてください.もちろん他の部分も修正OKです. &color(red,yellow){'' ヒント2 ''}; String[] item = readdata.split(" "); を使うと、入力データが ADD 40 のときは、 item[0]は、ADDが入っています。 item[1]は、40が入っています。 ただし、item[1]に入っている40は文字の40なので計算ができないので、 Integer.parseIntを使って数字に変換する必要があります。 &color(red,yellow){'' ヒント3 ''}; ADDなどの命令の追加場所は、 if (operator.equalsIgnoreCase("EXIT"))の前くらいです! &color(red,yellow){'' ヒント4 ''}; 「2つ目の要素があれば,文字列から数値に変換する」は、 if文で条件わけをしましょう! if (item.length > 1)を使うと、itemという配列が1個なのか 2個以上なのかを区別できます! *** 発展(余裕があったらどうぞ.必須ではありません.) [#w064d551] - 適切なエラー文が表示されるよう,プログラムを工夫してみましょう. -- 例えば,下のように実行してみるとどうなりますか? ADD A ADD ADDD (何も入力しない) - オリジナルの命令語や新機能などを考えてみましょう. *** よくあるエラー [#hfcf68cc] - ''配列の要素数不足'' String operand = item[1]; -- "ADD 3"を入力すると,item[0]に"ADD",item[1]に"3"が入ります.(要素数2) -- しかし,入力内容が"ADD"だけだと?item[1]はありませんね.(要素数1) -- この状態で,上記のプログラムを読むと怒られてしまいます. if (item.length > 1) { String operand = item[1]; } -- 回避するには,このように「要素数が2以上」という条件をつけましょう. - ''if文とスコープ'' -- %%%if文の中で宣言した変数は,そのif文の中でしか使用できません%%%. String operand; if (item.length > 1) { operand = item[1]; } &color(red,yellow){'' try-catchとは ''}; try-catchは,何らかの例外が発生するところで利用します(C言語にはないので,とっても便利な機能です!). 「例外」というは,正しく動けば問題ないけど,なにかがおかしいとき=例外 です. 下の例では,tryブロックの中で,バッファから読み込んだ時に, 読み込めなかったら,catchブロックにはいります. try { //バッファから一行読み込みます readdata = br.readLine(); } catch (Exception ex) { // 読み込み失敗時は,EXITする readdata = "EXIT"; } 以下,例外の一例です. - 数字が入っているはずの文字を,数字に変換しようとしたけど中に文字が入っていて,例外が発生 - ファイルに書き込もうとおもったけど,書き込み禁止で,例外が発生 - ネットにつなごうとおもったけど,ネットにつなげなくて,例外発生 など沢山あります. とりあえず,~ catch (Exception ex) で例外はつかまえられますが,細かい例外を使い時があります. いくつか紹介します.~ ArrayIndexOutOfBoundsException //配列の境界を越えた例外.int a[6]までしか確保していないのに,a[6]にアクセスしたとか~ NullPointerException //確保されていない領域になにかした~ FileNotFoundException //ファイルが見つからない~ など,いろいろあります. それぞれの例外をつかまえて(catch) して処理を変えるなども可能ですね. 以下,例を示します. try{ 例外が発生するかも知れない文1; 例外が発生するかも知れない文2; 例外が発生するかも知れない文3; ..... } catch (例外クラス1 変数名1){ 例外クラス1の例外が発生した時に実行する文; ..... } catch (例外クラス2 変数名1){ 例外クラス2の例外が発生した時に実行する文; ..... } .... 対応したい例外だけ,catchを書く finally { 例外が発生してもしなくても,実行する文; // finally ブロックはなくてもいい. ... } &size(16){[[&ref(http://yoslab.net/netprog/next.gif,nolink); 演習のページに戻る>演習課題]]};