TopPage > 演習課題 > 小課題

Javaプログラミング演習の確認(まとめ)

ここで,演習1の理解度を確認するために,小課題を行います.

みなさんの理解度を確認するために,課題のプログラムができたら,ソースコードを提出してください.

※提出されたソースコードの出来は、最終評価の点数には関係しません.できるところまで,やってみてください. わからなければ,吉野またはTAに質問してください.

提出期限

提出先:以下の2人のTA のメールアドレス両方に".javaファイル"を添付して送ってください。
件名:Javaプログラミング小課題-60236???(名前)

本信(TA,大学院1年):s206263@wakayama-u.ac.jp
河島(TA,大学院1年):s206075@wakayama-u.ac.jp
メールの本文もちゃんと書くようにしましょう!書き方は調べれば出てきます.
※動作確認をして返信します.少し時間がかかるかもしれませんが待っていてください.一週間たっても返事がない場合,TAまで連絡をください.

サンプルプログラムの紹介

まず,以下のサンプルプログラムをダウンロードしてください.

fileEnsyu.java ダウンロードソースコードファイルを見る

サンプルプログラムを実行すると,以下のような表示が出ます.

現在の値: 0
命令を入力してください:

ここで,何か値(例としてABC)を入力すると,

命令を入力してください: ABC
命令ABCは解釈できません.
現在の値は:0

と表示され,「命令を入力してください」に戻ります. EXITと入力すると,文字入力のループを終了します.

課題

命令文を入力すると,内部の値(現在値)が変わる計算プログラムを作成してください.
現在の値を表す変数名はvalueにしています.

具体的には,

ADD 100 [Enterキー]

と入力すると,プログラムの「現在の値」に100を加算します. 同様に,

SUB 50 [Enterキー]

と入力すると,プログラムの「現在の値」から50を減算します.

このように,命令語と数値1つを与えると,プログラム内の「現在の値」を操作して,表示するプログラムを作成してください.

  • 入力する命令語は,以下の4つとします.
    • 加算(ADD),減算(SUB),乗算(MUL),除算(DIV)
  • 各命令は,大文字でも小文字でも認識するようにしてください.
  • 例外エラーを考慮し,なるべくプログラムが止まらないようにしてみてください.
    • 例えば,「0で割る」とエラーが発生します.

ヒント1

  • この小課題でやってもらいたいことは,以下の2つです.
  1. 命令文にある数値文字列を,数値(int型)に変換する処理
  2. 4つの命令語を認識し,適切な計算をする処理

サンプルプログラム中の適切な場所に,

// (1) 2つ目の要素があれば,文字列から数値に変換する.

のように,コメントを挿入していますので,参考にしてください.もちろん他の部分も修正OKです.

ヒント2

String[] item = readdata.split(" ");
を使うと、入力データが ADD 40 のときは、
item[0]は、ADDが入っています。
item[1]は、40が入っています。
ただし、item[1]に入っている40は文字の40なので計算ができないので、
Integer.parseIntを使って数字に変換する必要があります。

ヒント3

ADDなどの命令の追加場所は、
if (operator.equalsIgnoreCase("EXIT"))の前くらいです!

ヒント4

「2つ目の要素があれば,文字列から数値に変換する」は、
if文で条件わけをしましょう!
if (item.length > 1)を使うと、itemという配列が1個なのか
2個以上なのかを区別できます!

発展(余裕があったらどうぞ.必須ではありません.)

  • 適切なエラー文が表示されるよう,プログラムを工夫してみましょう.
    • 例えば,下のように実行してみるとどうなりますか?
ADD A
ADD
ADDD
(何も入力しない)
  • オリジナルの命令語や新機能などを考えてみましょう.

よくあるエラー

  • 配列の要素数不足
    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];
      }

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 ブロックはなくてもいい.
  ...
} 

next.gif 演習のページに戻る


添付ファイル: fileEnsyu.java 739件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   一覧 単語検索 最終更新     最終更新のRSS
Last-modified: 2019-10-10 (木) 14:53:39 (1653d)