情報システム開発演習(Java演習) の実施手順
[[TopPage]] > [[演習課題]] > 小課題

- 情報システム開発演習(Java演習) では,このWikiにしたがって進めてください.
-- 演習場所: A803演習室
- 毎回,授業後に記録システムに演習の進捗状況を書いてください.
-- 進捗状況記録システム: https://www.wakayama-u.ac.jp/~yoshino/javalog/ ~
// ※現在システムに不具合が起きているためこちらにアクセスしてください:https://com.center.wakayama-u.ac.jp/~s155024/javalog_test/
* Javaプログラミング演習の確認(まとめ) [#ebfdd1eb]

- 授業時間以外での問い合わせ先
--提出課題やQ&Aのページも確認してください.
-【プログラミングの質問・相談】
-- 原則,掲示板に書いてください.TAを直接捕まえての質問もOKです(吉野研究室にいます)
-- 掲示板: https://www.wakayama-u.ac.jp/~yoshino/netprogbbs2004/ (掲示板投稿時のお願い)
- 【授業や評価に関することなど】
-- 吉野先生: yoshino@sys.wakayama-u.ac.jp
-- 伊藤先生: itou@sys.wakayama-u.ac.jp
-- 伊原先生: ihara@sys.wakayama-u.ac.jp
ここで,演習1の理解度を確認するために,小課題を行います.

-【Wikiの不備,将来的な話,その他雑多なこと】
-- 長田(TA,大学院1年):@gmail.com
-- 梅本(TA,大学院1年):Gorebyss368@gmail.com
みなさんの理解度を確認するために,課題のプログラムができたら,&size(16){''ソースコードを提出''してください.};

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

1.演習について
- この演習の方針について説明します.

2.準備
*** 提出期限 [#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まで連絡をください.

-プログラミング演習の事前準備
-はじめてのJAVAプログラミング
-演習0 文字列の画面出力

3.演習課題 

最終課題を完成させるために必要なJavaプログラミングに関する知識を身につけるための演習課題です.
** サンプルプログラムの紹介 [#p7f0b0f3]

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

4.最終課題に向けて
&ref(Ensyu.java,,,Ensyu.java ダウンロード);/[[ソースコードファイルを見る>http://yoslab.net/netprog/source/Ensyu.java]]

任意の演習課題です.オセロを作りたい方は参考にしてください.
サンプルプログラムを実行すると,以下のような表示が出ます.

-演習4-1 オセロの基礎1
-演習4-2 オセロの基礎2
 現在の値: 0
 命令を入力してください:

5.この演習で提出する課題 
ここで,何か値(例としてABC)を入力すると,

レポートとして提出してもらう課題を載せています.
 命令を入力してください: ABC
 命令ABCは解釈できません.
 現在の値は:0

-[[小課題>小課題 Javaプログラミングの確認]]
-最終課題
と表示され,「命令を入力してください」に戻ります.
EXITと入力すると,文字入力のループを終了します.

6.付録

- Javaのオブジェクト指向の概説
- 配布可能な実行ファイルの作成
-過去の提出作品
** 課題 [#t38e58a7]

過去に提出された代表作品を紹介します.参考にしてください.
命令文を入力すると,内部の値(現在値)が変わる計算プログラムを作成してください.~
現在の値を表す変数名はvalueにしています.

具体的には,

- [[Q&A集>Q&A]]
 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); 演習のページに戻る>演習課題]]};


トップ   一覧 単語検索 最終更新     最終更新のRSS