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

* Javaプログラミング演習の確認(まとめ) [#ebfdd1eb]
//PATH="C:\Program Files\Java\jdk-10.0.1\bin\"
- 出席確認のページ:https://moodle2.wakayama-u.ac.jp/2020/course/view.php?id=369

ここで,演習1の理解度を確認するために,小課題を行います.
- 情報システム開発演習(Java演習)1・2では,このWikiにしたがって進めてください.
-- 演習場所: A803演習室(A802も併用)
- 毎回,授業後に,進捗状況記録システムを利用して,演習の進捗状況を報告してください.
//-- 来週,アナウンスします.
-- 進捗状況記録システム: https://web.wakayama-u.ac.jp/~yoshino/javalog2020/ ~
// ※現在システムに不具合が起きているためこちらにアクセスしてください:https://com.center.wakayama-u.ac.jp/~s155024/javalog_test/

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

※提出されたソースコードの出来は、最終評価の点数には関係しません.できるところまで,やってみてください.
わからなければ,吉野またはTAに質問してください.
-【Wikiの不備,将来的な話,その他雑多なこと】
-- 安東(TA,大学院1年):s216009@wakayama-u.ac.jp
-- 多田(TA,大学院1年):s216152@wakayama-u.ac.jp

//- 【最終課題の仕様書の提出(Moodle)】
- 【各演習における課題の提出先】
-- 後ほど案内します.
//-- アップロード先:https://lms.center.wakayama-u.ac.jp/moodle/course/view.php?id=499

*** 提出期限 [#n31860da]
1.演習について
- この演習の方針について説明します.

&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まで連絡をください.
2.準備

プログラミングを行う環境を準備します.また,簡単なプログラムから演習の説明をします.

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

** サンプルプログラムの紹介 [#p7f0b0f3]
3.演習課題 

まず,以下のサンプルプログラムをダウンロードしてください.
演習1,演習2における課題を完成させるために必要なJavaプログラミングに関する知識を身につけるための演習課題です.~

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

サンプルプログラムを実行すると,以下のような表示が出ます.
情報システム開発演習2における最終課題を作成するにあたり,ターン制や盤面の同期,盤面の動作・状況整理を学習するための演習課題です.オセロを作りたい方は参考にしてください.

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

ここで,何か値(例としてABC)を入力すると,
ここまでを情報システム開発演習1で実施します.演習2では,ここまでの成果をもとにしてネットワーク対戦型システムを作成していきます.

 命令を入力してください: ABC
 命令ABCは解釈できません.
 現在の値は:0
5.この演習で提出する課題 

と表示され,「命令を入力してください」に戻ります.
EXITと入力すると,文字入力のループを終了します.
採点対象となるレポートや課題を載せています.授業中,順次説明,提出を指示します.

-[[小課題>小課題 Javaプログラミングの確認]]
-仕様書
-演習1の課題
-最終課題

** 課題 [#t38e58a7]
6.付録

命令文を入力すると,内部の値(現在値)が変わる計算プログラムを作成してください.~
現在の値を表す変数名はvalueにしています.
- Javaのオブジェクト指向の概説
- 配布可能な実行ファイルの作成
-過去の提出作品

具体的には,
過去に提出された代表作品を紹介します.参考にしてください.

 ADD 100 [Enterキー]

と入力すると,プログラムの「現在の値」に100を加算します.
同様に,
- [[Q&A集>Q&A]]

 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