[[B3/ソフトウェア工学]] * ソフトウェア工学の質問&回答集 [#z68161b0] ** 更新履歴 [#gcf35014] - 第2回分を反映.お願いにメールの書き方を追記. -- [[中村]] &new{2020-05-14 (木) 09:09:39}; - 第3回分を反映 -- &new{2020-05-18 (月) 11:03:44}; - 第4回分を反映 -- &new{2020-05-21 (木) 10:48:43}; - 第5回分を反映 -- &new{2020-05-25 (月) 13:22:01}; - 第6回分を反映 -- &new{2020-05-28 (木) 10:44:41}; - 第7回分を反映 -- &new{2020-06-01 (月) 11:35:26}; - 第8回分を反映 -- &new{2020-06-04 (木) 10:51:00}; #comment ** お願い [#a6f26454] - &color(red){''全ての課題の提出状況を再確認してください''}; -- 成績の大半は課題で決まってしまうので,きちんと全部出してください. -- 「第N回を提出したのに反映されていません,確認してください」といったメールが多いです.まずは自分のメールを見直してください. --- 宛先,件名,添付ファイルなどなど. --- 原因がわかったら,必ず&color(red){''再送''};してください. - メールおよび課題は&color(red){''誰が見ても恥ずかしくないように''};書いてください.(TAより) -- 以下のメールの書き方を参考にしてください. -- 本文に「簡単でした.」だけ書く人に対して,あまり良い印象を持ちません.TAもメールを見ますし,中村先生にも失礼です. -- 課題の出力について(println("学生を追加しました");など)は自由ですが,機能が分かるように,不快な表現はしないように --- 課題を見るのは人間です. - チャットで質問する際には、''全員あて''に送ってください -- TAが対応できません。 -- 恥ずかしい気持ちはわかりますが、何も恥ずかしいことはありません。 -- みんなの知識にもつながるので、遠慮せずに勇気を出して投稿してください - 提出要領をよく読んでください -- 圧縮の仕方,ファイル名,メールの件名 - メールの差出人をきちんと設定すること.以下,架空のアンチパターン. From: zxc124sdawer@eee.mymail.com -> 誰? From: Taro <taropon234ta@... > -> どちらの太郎さん? From: あいうえお <aiueo12345@...> -> やる気あるのか? From: 暗黒の騎士・ガイア <gaia-saikyo-legend@...> -> 痛いからやめろ -- [[情報基盤センターのメールを設定:http://www.istc.kobe-u.ac.jp/services/StandardService/PersonalMail]]すれば,プライベートメールと分けられるので良い. - 添付忘れを確認すること - メールの書き方 -- 自分は誰?何に関するメール?メールはLINEではありません. -- 出す相手や状況によって,書き方・トーンを考える. -- 読み手が読みやすいように,適宜,改行や空行を入れる. -- サンプル ○○先生 情報知能工学科 1234567Tの情知太郎です. 第〇回のソフトウェア工学の課題を提出いたします. よろしくお願いいたします. 【わからなかったところ】 問○○について,○○をしようと思い××のようにしましたが うまくいきませんでした.現状,△△△のように対処していますが, どうすればうまくいくのか知りたいです. ----------------- 情知太郎 1234567T 神戸大学工学部情報知能工学科 jouchi.taro@foo.mail.com ** 改善点 [#z3373458] - 実行例があると嬉しい - 授業スピードが速い ** 質問 [#v8fb8e58] *** 2020/06/04 [#n94cd4c6] - アスキーアートが崩れるので,Mac環境でも等幅フォントが使いたい -- エディタ画面上で右クリック→設定 -- 講義資料と同様の手順でコンソールのフォント設定画面へ -- 「等幅」の中から「Osaka」を選択 - toString()の使い道 -LineやBoxのtoStringは何を実装するか -- 第5回資料「メソッドtoString() の作成」を参照 -- インスタンスの状態を確認するために利用します -- Lineであれば「直線 長さ:10」と出力する.Boxであれば,「箱 幅:10 高さ:5」など --- そのインスタンスが何か,変数の値がいくつか出力してみる *** 2020/06/01 [#f3cc84e9] - タブの間隔が一定に表示されません。(04256) -- 水平タブ(\t)の仕様です -- (Eclipseの標準設定であれば)半角空白を1-8個利用して,表示の先頭を合わせようとしている -- 名前が長いStudentが入ると,どうしてもズレてしまう.SYstem.out.formatを利用して表示数を制限するか,諦めます. *** 2020/05/28 [#n490f4a3] - (第5回)クラス図の(FriendManagerの)setFriendList関数と(Friendの)toString関数の使い道がわかりませんでした -- setFriendListについて,第5回資料「アクセサ (accessor)」を参照してください. --- フィールド(ここではFriendList)に対して,値の代入を行うときに用いる関数. --- 今回の課題であれば,リストの切り替えや読み込みの時に使う. -- toStringについて,第5回資料「メソッドtoString() の作成」を参照してください. --- オブジェクトを文字列で表現したいときに使う. System.out.println(friend型の変数) //toString()が自動的に実行され,変数が文字列で表示される ~ - (第5回課題2)FriendManagerクラスにおいて,以下の2つの違いを教えていただきたいです. private FriendList friendList; FriendList friendList = new FriendList(); -- 前者は変数の宣言,後者はインスタンスの生成 -- FriendList型とは,FriendList.javaで定義した独自クラスのこと. -- intやstringのように,自分で型を作成できる. FriendList friendList; // FriendList型の変数を宣言する. friendList = new FriendList(); //変数にFriendListの実体を代入する FriendList friendList = new FriendList(); //宣言と代入を一気に書くとこんな感じ *** 2020/05/25 [#p27360ac] - 0.0 / 0.0 の結果がNaNとなり,処理できない -- NaN:Not a Number,実数の異常な値を表す特殊な数 -- 無限,虚数,負の対数といった計算結果が出たとき,変数に代入される -- 処理するなら以下の通り if (Double.isNaN(x)) { // 変数xがNaNの時に実行する } - 「ソースリーク:’pw'が閉じられることはありません」 -- 以下の同様の質問,実行できるなら特に気にしなくても構いません - (第5回課題-2)FriendlietとFriendManagerを分ける必要がわかりませんでした >Friendは友達データ,FriendListは友達データベース,FileManagerはユーザとのインタフェースというように責務を分けている. -- 課題より引用 *** 5/21(木) [#ha8da383] - スプレッドシートにアクセスできません,書き込めません -- 同時接続が多いと,閲覧専用ページに飛ばされる時があります. -- 少し待ってから,元のURLにアクセスしてみてください. - csvのダウンロード時にtxtファイルに変換されてしまい、プログラムもそれに合わせて実装しました。大丈夫でしょうか? -- プログラムが正しく動作し、提出時にtxtファイルも一緒に提出してくだされば、それでも問題はありません。 - PrintWriterのインスタンスpwにリソース・リークの警告が出る - ListにString型を追加することができない -- 第2,3回を復習してみてください //int型を追加するリスト ArrayList<Integer> list = new ArrayList<Integer>(); //String型を追加するリスト ArrayList<String> list = new ArrayList<String>(); //キーをString型にして,Person型の値を持つマップ HashMap<String, Person> map = new HashMap<String, Person>(); - ファイルが読み込めない - java.io.FileNotFoundException: *** (指定されたファイルが見つかりません。) -- 対象のファイルをプロジェクト直下に配置していますか? -- srcの中ではありません,第3回講義のVideo 46:40ごろを参照してください. - 提出が反映されません -- 提出要領から引用 > 以下の要領で電子メールを作成し,2のファイルを添付して送付すること. > To: newse@ws.cs.kobe-u.ac.jp > Subject: 第x回課題:学籍番号 (例: 第3回課題:0123456) -- 以下は反映されないパターン --- 「第三回」のように,漢数字を利用しているもの --- 「学籍番号:0123456」のように,例通りでないもの --- 「 第 3 回 課 題 : 0 1 2 3 4 5 6 」のように,無駄に空白が混じるもの -- 反映されない場合,自身のメールのSubjectをもう一度確認し,再提出してください. *** 5/18(月) [#f1cd7eb7] - 課題提出の際,main.javaも提出しますか? -- プログラムの実行に必要な全ての.javaファイルを提出してください - サンプルプログラムやネットの似た方法をコピペ・修正して用いること大丈夫でしょうか?(コード盗用にかからないか) -- 書籍やネットの情報も活用してください.ただし,コピペで満足せず,理解して使ってください. -- コードクローン検出技術はもっと高度です,引っかかりません. - 「メイン型が含まれません」となりエラーになる -- module-info.javaを削除してください. - 第3回発展課題にて,「ソースリーク:’pw'が閉じられることはありません」と注意みたいなものが出てきました -- PrintWriterクラスやファイルを扱うものは,利用後はcloseします. -- 明示的にリソースをメモリ上から解放するため.閉じないと内容が反映されないなどエラーの元になります. - 課題提出後,クラスの名前が違っているためコンパイルできないことに気づきました.再提出した方がよいですか? -- 提出前にコンパイルできるか確認してください.再提出してください. *** 5/14(木) [#p6cb0b05] - "String labCode = ... ; の"..."はどういった意味なんでしょうか? -- 省略の意味なので実際に"..."を入力するというわけではないです. - 読み込んだテキストファイルの文字を出力したら文字化けしました -- 第三回の授業の(発展)の方法か文字コードをutf-8にしたものを読み込んで下さい - - javaファイルを圧縮しなければならないところをclassファイルを圧縮して提出してしまっていました。 -- javaファイルを圧縮して再提出してください - 提出する課題の圧縮前のjavaファイルの名前は何でもいいですか? -- javaファイルの名前(=クラス名)は今のところ何でもいいです.クラス名のつけ方は第5回の命名規則のところで勉強します. - 問2で、フィールドでStringの配列を作成した際にString[] word = new String[3];とし、各単語をword[0],word[1],,,に格納させるようにしたところ、単語ごとに分けたときに4つ以上になってもword[3],word[4],,,にエラーが出ることなく格納されていたんですけどなぜでしょうか。word.lengthは、最初に指定した文字(今回は3)ではなく、単語数に一致していました。 -- line.split(...)を実行した際に,その時点で配列が新しく生成されるためです. String line = "aaa,bbb,ccc,ddd,eee"; //コンマ区切り文字列 String [] word = new String[3]; //wordはサイズ3の配列への参照(ポインタ) word = line.split(","); //この時点で右辺で新しくサイズ5の配列が生成され,wordは新しい配列を指すようになる - Arrays.sortでsortする時、キーボード入力で入力された単語がひらがなや漢字であり、全角のコンマ("、")で区切られたとき上手く辞書順にならなかったのですが、どうすれば良かったのでしょうか? -- 全角のコンマは問題にある,ではないので,仕様に入っていません.対応しなくてよいです. - Jouchi j = new Jouchi;において、なぜjという変数名を用いているのでしょうか。 -- 変数名はj以外でもなんでもいいです. Jouchi jouchi = new Jouchi(); としたほうがわかりやすければそうしてください. -- 変数名のつけ方は第5回の命名規則のところで勉強します. - import java.util.Collections とはどういう意味でしょうか? -- Collectionsという(外部にある)Javaのクラスライブラリを,現在のクラスで使いますよという宣言です.第8回で詳しくやります. - Eclipseを開くとパソコンが止まってしまうようになりました。現在はhttps://repl.it/を用いて課題のプログラムを作成しています。 -- 課題のプログラムがクラウド内で消失しないよう,こまめにローカルにバックアップしてください. - 計算結果がNaNとなる場合のエラー処理をうまく実装できませんでした。 -- NaN は Not a Number の意味です.数値だと思って処理しようとしたができなかった場合,そのような値になります. - キーボードから読み込んだ文字列の読み取り方とその格納の仕方が理解できなかったので,課題ではScannerを調べて使用した. -- BufferedReaderの書き方については今はおまじないだと思っておいてかまいません. -- Scannerについても使用してかまいません. - 問2のソースコードはどうすれば入力したら「入出力例外」が出るかがわかりません。いつも、「フォーマット例外」しか出ていませんでした。 -- 入出力例外とは入出力の処理そのものが何らかの理由で失敗したときに返される例外です. -- 例として入出力処理中に別の処理が割り込んで最後まで入出力処理を行えなかった場合などがあります. -- 例えば,br.readLine(); の直前に,br.close(); を入れてみてください.入出力ができなくなって,IOExceptionが出ると思います. - 問2で、実数を入力するときに数字を全角で入力するとint型には変換できるのにdouble型には変換できないのがよくわかりませんでした。 -- 前回の質問にもありますが,全角のピリオドがダメみたいです.詳しくは前回の質問のリンクを参照してください. - 課題提出の際,zipファイルの命名規則は理解できたがソースコードの命名がよくわからない. -- 特に指定がない限り,きちんと動作するならソースコードにはどんな名前を付けてくださってもかまいません. *** 5/11(火) [#m5139e51] - Javaバージョンと JDK バージョンを教えてください. -- 基本的には好きなバージョンを使ってもらって構いません.開発環境もVSCodeなど他を利用して構いません. -- Pleiadesに付随するeclipse及びJavaを推奨しています - 提出の有無がわからない -- 講義資料の講義スケジュールを記載しているところに,提出確認のページがあります.Ctrl+Fで探してみてください. -- 採点はすぐにするわけではありません.納得いかない出来であれば,再提出してもOKです. - メールアドレスに指定はありますか(学番メール以外で提出したい) -- ありません.利用できるメールから出してください - コメントは英語でも大丈夫ですか? -- 大丈夫です.Writing in English is also accepted. - "Hello.java"の部分を"Hallo.java"に間違えてしまい、直そうとしましたが、ファイル名の変更方法がわかりません -- 右クリック→リファクタリングで変更してみてください.関連する箇所が一気に変わります. - zipファイルの圧縮方法を教えていただけないでしょうか。 -- グーグルで検索 -- (Windows)右クリック→圧縮フォルダ(zip) - Integer.parseInt()では、全角数字を入力してもint型に変換できたのですが、Double.parseDouble()では、全角数字を入力するとcatch (NumberFormatException e)に飛びます。何が違うのでしょうか? -- このあたり,APIドキュメントを読まないとわかりません. -- そもそも全角が通るのが不思議ですね. --- [[このあたりの記事:http://hito4-t.hatenablog.com/entry/2015/02/16/225714]]に載っています - 例外処理で,間違ったら再入力するルーチンができませんでした -- whileがないとできません.第2回の講義で説明します