プログラミング入門
B
第
10
回「イベントとリアクション」
講師
:
斉藤 賢爾
ks91@sfc.wide.ad.jp ∆ 棟 N206 2003 年度秋学期今日のメニュー
はじめに 課題レビュー 課題の出題 ミニチェック 練習問題: 自動販売機を改造する 状態遷移からクラスへ スロットマシンで見る便利なクラス/インタフェース ファイルからの入力 実習はじめに
みなさんのコメントからみなさんのコメントから
1
英語ができないので http://java.sun.com/j2se/1.4.1/docs/api/ が利用できません 日本語のページはないのでしょうか ⇒ 英語、できるようになるとよいですね http://java.sun.com/j2se/1.4/ja/docs/ja/api/index.html を試してみてください 決して分かりやすい日本語ではありませんが . . .みなさんのコメントから
2
jar ファイルをダブルクリックしても何も起こりません 原因は何なのでしょう ⇒ いろいろな可能性が考えられます 次を確かめてください manifest.txt を指定していますか? jar コマンドのオプションに f と m を入れて、その順序で出力アーカイブ ファイル名と manifest.txt を指定していますか? manifest.txt の内容は正しいですか? 最後に改行を入れていますか? 後で all-in-one jar ファイルの作り方をもう一度説明しますみなさんのコメントから
3
GUI が非常に難しく、自分の思った表示になりません 何度も試していますが、GUI の詳細を知らないために成功していません ⇒ 具体的にどうしたいか、質問をいただければ説明できると思います GUI の詳細な作り方は多岐に渡ります GUI を作ること自体が目的ではないため、この授業では GUI の説明を網羅す るためだけに時間を割くことはしませんが、みなさんが実現したいことの手 助けはしたいと考えています このコースの残りの授業は、主にそのこと (Q & A) をしていきます 履修者のメーリングリスト で質問して、情報を共有しましょう今週のテーマ
イベントとリアクション イベント (event) 出来事、事件の意 ユーザによる操作や時間の経過 · 他には、他のプログラムからの通信などがあります リアクション (reaction) 反動、反応の意 イベントに対する反応、応答 今週は、インタラクティビティ (相互作用) の実現の仕方を学びます みなさんが期末制作で作るプログラムは、インタラクティブなプログラムです 環境との相互作用を持つ物体をシミュレートします 対話型プログラムとも呼びます 今週の授業を終えると、(少なくともみなさんに共通して知っておいて欲しいことにつ いては) 本当にもう説明するものがなくなります 残りの 3 週は、みなさんの抱える具体的な問題を解決していくために使います今日のメニュー
はじめに 課題レビュー 課題の出題 ミニチェック 練習問題: 自動販売機を改造する 状態遷移からクラスへ スロットマシンで見る便利なクラス/インタフェース ファイルからの入力 実習課題レビュー
課題をおさらいする期末制作
.
プログラムによ
る物体の表現
みなさんの身の回りに実在する物体のうち、環境との相互作用を持つものをひとつ選 び、1,000 行未満程度の Java 言語のプログラムでその動作を真似てください。 物体とは 長さ・幅・高さの 3 次元において空間を充たしていて、知覚の対象となりう る物質。もの。 環境とは 周囲をとりまき、物体と相互作用を及ぼし合うものとして見た外界。 相互作用とは 互いに働きかけること。 定義はすべて広辞苑第五版に依りました。 グラフィカルなプログラムである必要はありません。 アプリケーションとして制作してください。 main() メソッドを有するプログラムがアプリケーションです。 各自、ひとりで制作してください。課題
9.
画面をデザインする
期末制作で真似てみたい物体を仮に決めてください まだまだ後で変更できます ただし、今回の課題では画面を作るので、これより後に変更すると作業の手戻り が発生します その物体をコンピュータ上で表現するために、画面のデザインを作ってください Java 言語のプログラムとして作成してください ユーザがどのように操作できるかを考えて、ボタンなどを配置してみてくだ さい 機能はまだ作り込まなくてよく、ボタンなどが実際に反応する必要はありま せん 画面がプログラムの進行により変わっていく場合は、最初の画面だけを作れば OK です 期末制作では GUI を使わない人も、練習だと思って作ってみてください提出状況と傾向
80 人中 6 人 提出 (12/9 現在) 傾向と所感 提出が少ないです 分からなかったら、履修者のメーリングリストで質問しましょう · 同じ問題を抱えている人たちと情報を共有しましょう · 具体的に、何をしたいか、そのためには何が問題となっているかを書いて ください · ちなみに、未だテーマが決まらなくてできなかった人は? 自動販売機のプログラム (Vending.java) を参考にしているものが多いです 参考にするのは全然、構いません (そのための授業マテリアルです) ただ、自分が表現したい内容を、自分の力でプログラミングするのが趣旨で すので、そのまま書き写すような真似はやめましょう 他にもどんどん、参考となるプログラムを紹介していきます All-in-one jar 形式になっていないものが多いです (Windows XP や Mac OS X で) ダブルクリックで起動できませんj
All-in-one jar
o
ファイルの作り方
-jar オプションで実行できる jar ファイルを作成するためには、次の内容のテキスト ファイル manifest.txt を用意します Main-Class: メイン(main()) メソッドを持つクラス名 < 改行 > 次のコマンドを用いて圧縮アーカイブを作成しますz:> jar cvfm 出力ファイル名 manifest.txt *.class *.java その他の必要な
ファイル群 <Enter> オプションの説明 c: 作成 v: 詳細表示 f: 圧縮ファイル指定 m: マニフェストファイル指定 その他の必要なファイルとは、例えば画像ファイルです ディレクトリ名を指定すれば、そのディレクトリ内のすべてのファイルが アーカイブに入ります * はワイルドカードで、*.java はそのディレクトリでファイル名が ∼.java にマッ
j
All-in-one jar
o
ファイルの作り方
(具体例)Vending.java のための manifest.txt を用意します
Main-Class: Vending < 改行 >
次のコマンドを用いて圧縮アーカイブを作成します
z:> jar cvfm vending.jar manifest.txt Vending.class Merchandise.class Money.class Vending.java images manifest.txt gpl.txt
jar ファイルの名前は大文字で始める理由がありません (クラス名と無関係です) ワイルドカードを使わずに、全部のファイルの名前を指定している例です 他のプログラムも入っているディレクトリで jar ファイルを作る場合は上の ように書く必要があります 独立したディレクトリの中で作業しているなら、*.class *.java で十分です manifest.txt 自体も入れています みなさんがダウンロードした vending.jar にも入っているので参考にしてく ださい
j
Java
言語での
GUI
java.awt
パッケージ
(AWT: Abstract Window Toolkit)
Java
言語の初期のユーザインタフェース用ライブ
ラリ
クラスの例
: Button
javax.swing
パッケージ
(Swing)
←
推奨
Java
言語の最近のユーザインタフェース用ライブ
ラリ
クラスの例
: JButton
←
J
で始まる
j
Swing
で用意されて
o
いる部品
Visual Index
で説明します
この授業では
Applet
は用いません
部品の大雑把な分類
コンテナ
他の部品を貼りつけることができます
例
: JFrame (
おおもとのコンテナ
), JPanel,
. . .
レイアウト
コンテナの中での部品の配置を決めます
例
: BorderLayout, GridLayout, BoxLayout,
. . .
ガジェット
操作したり、情報を表示するための部品です
. . .
j
画面を構成する
o
オブジェクト
フレーム (JFrame) PNG画像 (透明部分あり) パネル (JPanel) ボタン (JButton) アイコン (ImageIcon) パネル (JPanel) パネル (JPanel) ラベル (JLabel) 商品 (Merchandise) お金 (Money) ・GridLayout で横2列に レイアウト 縦に延びていくことが可能 ・GridLayout で横にレイアウト 境界線とタイトルを指定 ・境界線とタイトルを指定 ・JButton を拡張 JButton はアイコン や文字列ラベルを 付けられるボタン ・JButton を拡張j
画面表示までの流れ
Java 言語のアプリケーションで GUI のために何かを表示させるには、(一般にはアプ リケーションのクラスの構築子の中で) 次を行ないます
1. フレームを生成し、内容枠 (content pane) を取得します
frame = new JFrame(アプリケーションの名前); Container pane = frame.getContentPane();
2. フレームの設定をします // ウィンドウが閉じられる時はアプリケーションを終了させます。 frame.setDefaultCloseOperation(JFrame.EXIT ON CLOSE); 3. 必要なものを生成して内容枠に追加します (後述) 4. 追加した中身に合わせてフレームの大きさとレイアウトを調整し、実際に表示し ます frame.pack(); frame.setVisible(true);
j
中身を追加するコード
o
の抜粋
// レイアウトを指定してパネルを生成します。
JPanel panel
= new JPanel(new GridLayout(0, I NUMBER OF GOODS PER ROW));
// パネルに商品を追加します (i++ はi = i + 1 の略と思ってください)。
for (int i = 0; i < aoGoods.length; i++) { : panel.add( aoGoods[i]); } // 内容枠(pane) の北側(上部)にパネルを追加します。 pane.add(panel, BorderLayout.NORTH); コンテナを生成して、その中に部品を配置します そのためには add() メソッドを用います コンテナの中にコンテナを配置することもできます pane も panel もコンテナです
j
よく使うコンテナ
JDialog ダイアログウィンドウです JOptionPane を使って簡単に表示できます (Vending.java 参照) JFrame アプリケーション全体のフレームですメニューバー (menu bar) と内容枠 (content pane) を持ちます JPanel
フレームの中に配置できるコンテナです
レイアウトを指定することで、さまざまな配置が可能となります
JPanel panel = new JPanel(レイアウト);
: //配置する部品の準備
j
よく使うレイアウト
BorderLayout
コンテナの東 (右) 西 (左) 南 (下) 北 (上) および中央に部品を配置できます
JPanel panel = new JPanel(new BorderLayout());
: //配置する部品の準備
panel.add(部品, BorderLayout.CENTER); // NORTH/SOUTH/EAST/WESTも可
GridLayout
列と行の数を指定して部品を配置できます
JPanel panel = new JPanel(new GridLayout(行の数,列の数));
: //配置する部品の準備
panel.add(部品);
行 (列) の数に 0 を指定すると、何行 (列) かは気にしないことになります それぞれの部品が占める大きさは自動的に揃えられます
j
よく使うガジェット
JButton
文字列やアイコンをラベルとしたボタンです
JButton button = new JButton(文字列); // あるいは
JButton button = new JButton(文字列, アイコン); // あるいは
JButton button = new JButton(アイコン);
JLabel
文字列やアイコンを表示します
JLabel label = new JLabel(文字列);// あるいは
JLabel label = new JLabel(アイコン);
操作する必要のない画像は、アイコンにして JLabel で表示します
j
アイコン
ImageIcon
画像を JButton や JLabel で使えるようにします
ImageIcon icon = new ImageIcon(画像の URL);
画像の URL は次のように指定します getClass().getResource(ファイルのパス名) // パス名の例: ”images/10yen.png” これにより、jar ファイルの中の画像を表示できます a a 本当は、URL を指定しなくてもパス名だけでアイコンは作れますが、jarファイルにし て配布することを考えて、この授業では URL を指定する方法を学びます。
今日のメニュー
はじめに 課題レビュー 課題の出題 ミニチェック 練習問題: 自動販売機を改造する 状態遷移からクラスへ スロットマシンで見る便利なクラス/インタフェース ファイルからの入力 実習課題の出題
今週は、ちょっとおさらいしよう、という趣旨の課題です課題
10.
セルフチェック
自習用の問題集に解答し、これまで授業で習った内容を復習してください。 手順 1. セルフチェック問題集の web ページ (以下の URL) をブラウザで表示させます。 http://www.soi.wide.ad.jp/quiz/ 2. SOI に登録したメールアドレスとパスワードを用いてログインします。 3. プログラミング入門の問題集に解答します。 成績一覧を参照することで、どの問題に解答したかを確認できます。 評価方法 セルフチェックを行ったこと自体を評価します。提出方法
今回、
SOI
のレポートシステムは用いません
ただし、自分が未だ提出していないレポートを提出
するにはよい機会です
課題
8, 9
も是非、提出しましょう
期末制作へのステップとなるレポートは、取り組
んだ方が制作は後でずっと楽になります
〆切
2003/12/14 23:59 JST
今日のメニュー
はじめに 課題レビュー 課題の出題 ミニチェック 練習問題: 自動販売機を改造する 状態遷移からクラスへ スロットマシンで見る便利なクラス/インタフェース ファイルからの入力 実習ミニチェック
j
これ、何ですか
次は、Java 言語で書かれた Vending クラスの構築子のコードの抜粋です
buttonCancel = new JButton(S LABEL CANCEL); buttonCancel.setEnabled(false);
buttonCancel.addActionListener(this);
panel.add( buttonCancel, BorderLayout.CENTER);
panel, JButton, setEnabled(), addActionListener() はそれぞれ何ですか? 変数? 値? 型? メソッド? 構築子? クラス? インスタンス?
_buttonCancel, this はそれぞれ何型ですか? S_LABEL_CANCEL の型は?
今日のメニュー
はじめに 課題レビュー 課題の出題 ミニチェック 練習問題: 自動販売機を改造する 状態遷移からクラスへ スロットマシンで見る便利なクラス/インタフェース ファイルからの入力 実習練習問題
:
自動販売機を改造する
自動販売機のおさらいj
簡単な自動販売機の例
vending.jar
授業ページから
ダウンロード
しよう
実行してみよう
方法
1: vending.jar
のアイコンをダブルクリック
方法
2:
z:> java -jar vending.jar <Enter>
どんな点が簡単か
お金も商品も無尽蔵であることが前提
商品の価格は
1
種類
j
自動販売機のソース
o
ファイルを得る
次のコマンドで all-in-one jar ファイルを解凍して、中のソースファイルを取り出して ください
z:> jar xvf vending.jar <Enter> オプションの説明 x: 解凍 v: 詳細表示 f: 圧縮ファイル指定 Vending.java がソースファイルです images ディレクトリの中には、自動販売機のプログラムで用いる画像ファイル (PNG a形式) が格納されています a
j
練習問題
:
改造しよう
次のように自動販売機を改造してください (Vending.java を書き換えてください) (先週の改造が済んでいることを前提とします) おつりを自動的に出す 商品を買った後の残りの投入金額が、最も安い商品の値段に満たなければ、 ボタンが押されなくてもおつりを出すようにします プロジェクタに完成例を映して説明しますj
インタフェース
インタフェースは、クラスに似ています クラスと同様、ある型を表します ただし、定数と中身のないメソッドだけを定義できます クラスがカテゴリーを表すのに対し、インタフェースは能力を表すと考えれ ばよいでしょう extends ではなく、implements と書いて使います 例: public class A implements B {. . .}意味 1: クラス A は、インタフェース B (のメソッド) を実装します 意味 2: クラス A は、インタフェース B であるかのように扱えます · クラス A のインスタンスは、インタフェース B で定義される能力を持つ ものとして扱えます 実装するインタフェースは ‘,’ で区切っていくつも指定できます ActionListener インタフェース よく使われるインタフェースです
j
インタフェースの例
public class Vending implements ActionListener {
: public Vending() { : // addActionListener() はActionListener 型の引数を受け取ります buttonCancel.addActionListener(this); : }
public void actionPerformed(ActionEvent event) {
Object source = event.getSource(); // イベントの発生源を取得します
: // ボタンが押されたときの処理を行ないます } : } ActionListener を実装するクラスは、必ず actionPerformed() を定義しなければなり ません
今日のメニュー
はじめに 課題レビュー 課題の出題 ミニチェック 練習問題: 自動販売機を改造する 状態遷移からクラスへ スロットマシンで見る便利なクラス/インタフェース ファイルからの入力 実習状態遷移からクラスへ
具体的な翻訳の手法は、みなさんの状態遷移図が整理されてから説明します 今週は一般論を説明します
p
状態遷移からクラスの
o
設計へ
∼
GUI
編
外界からのイベントを受け付ける場合 イベントを受けるガジェットを考えます (ボタンやテキストフィールドなど) イベントは基本的に ActionListener の actionPerformed() で受けます ユーザのクリックやテキスト入力 タイマの発火 ウィンドウのクローズボタンの処理を行ないます 消滅のイベントに対応します プログラム内部から使われるオブジェクトの場合 イベント毎にメソッドを用意します 共通 状態をフィールドで区別しますp
状態遷移からクラスの
o
設計へ
∼
CLI
編
外界からのイベントを受け付ける場合 コマンドプロンプトからの入力を受けつけます ファイルリーダのクラス (後述) を用います プロンプトを表示してから入力を読み込みます 終了するための入力も用意します (“quit” コマンドなど) · 消滅のイベントに対応します プログラム内部から使われるオブジェクトの場合 イベント毎にメソッドを用意します 共通 状態をフィールドで区別します今日のメニュー
はじめに 課題レビュー 課題の出題 ミニチェック 練習問題: 自動販売機を改造する 状態遷移からクラスへ スロットマシンで見る便利なクラス/インタフェース ファイルからの入力 実習スロットマシンで見る便利な
クラス
/
インタフェース
Random
Date/SimpleDateFormat
Timer
JButton/ImageIcon
j
スロットマシンを
o
使ってみよう
授業ページからダウンロードしよう
All-in-one jar
ファイル
(
slot-machine.jar
)
実行
z:> java -jar slot-machine.jar
展開
z:> jar xvf slot-machine.jar
展開して得られるソースコードのファイルは
j
SlotMachine
の機能
o
の紹介
スロットマシンをモノマネします
レバーを引く
(
マウスをプレスする
)
とリールが回
転
(
絵柄の高速切り替え表示
)
します
レバーを離す
(
マウスをリリース
)
とリールが左か
ら順に停止します
本物と同程度の確率で絵柄が揃います
ウィンドウの左上に、プログラムを起動してからの
経過時間が表示されます
これを見て、遊び過ぎないようにしましょう
タイムトライアルと捉えても面白いでしょう
コインの投入、配当金などの娯楽性の高い要素はあえ
て外してあります
j
SlotMachine
で
o
用いている部品
Random (乱数発生器) リールの絵柄の選択に使用 実際のスロットマシンと同じアルゴリズムを用いています Date/SimpleDateFormat (時刻とその表現形式) 経過時間の表示に使用 Timer (タイマ) 経過時間やリールの絵柄の表示を行なうタイミングの取得に使用 JButton/ImageIcon (ボタンとアイコン) リールおよびレバーの表現に使用j
java.util.Random
乱数発生器です 構築子 Random(long seed) seed: 疑似乱数を発生させるための種 主要なメソッド int nextInt() ← 乱数を取得します 想定される用途 「おみくじ」、「モグラ叩き」など、偶然の要素があったり、物のいろいろな振る 舞いをシミュレートする場合j
Random
の使い方
random = new Random(System.currentTimeMillis());
↑ 現在の時刻 (ミリ秒) を種にする乱数発生器を生成
:
int iRandom = random.nextInt(); ← 乱数を取得
種が同じだと、全く同じ数列が生まれてしまい、乱数にならないので、毎回変える必 要があります
System.currentTimeMillis() は 1970 年 1 月 1 日 00:00:00 GMT を基点とする ミリ秒数なので、毎回、異なります
j
Random
の使い方
o
∼
ちょっと高度に
:
int iRandom = random.nextInt(); ← 乱数を取得
変数名=配列名 [Math.abs(iRandom) % 配列名.length]; ↑ 配列の中に入っている何かを選びます (Math.abs() は絶対値の取得) : 配列の中に、選ばれるもの (大吉、吉、凶とか) を適当にちりばめます 配列の要素数が 32 あるとすると . . . 大吉を 1 個置くと 321 の確率で選ばれます 凶を 3 個置くと 323 の確率で選ばれます
j
java.text
o
.SimpleDateFormat
日付・時刻の書式を設定するフォーマッタです 構築子 SimpleDateFormat(String pattern) pattern: 日付・時刻の書式(例: ”HH:mm:ss” (時:分:秒)) 主要なメソッドString format(Date date) ← dateを表す文字列を取得します
想定される用途
j
java.util.Date
ある時刻を表します 構築子 Date(long date) date: 1970 年 1 月 1 日00:00:00 GMT を基点とするミリ秒数 現在の時刻を表すミリ秒数は、System.currentTimeMillis() で取得できます 想定される用途 「時計」、「ストップウォッチ」などj
SimpleDateFormat/
o
Date
の使い方
format = new SimpleDateFormat(”HH:mm:ss”);← 時:分:秒 形式 :
time = new Date(System.currentTimeMillis());← 現在の時刻 String s = format.format( time); ← 時:分:秒 形式の文字列
ストップウォッチのように、ある時刻を基準とする相対時刻が必要な場合は、_format に GMT との時差をゼロにするように設定する必要があります
そうしないと、時差分が加算されて表示されます “SlotMachine.java” を参照してください
j
javax.swing.Timer
一定の間隔で繰り返し発火するタイマです 構築子
Timer(int delay, ActionListener listener)
delay: 発火する間隔 (単位: ミリ秒) listener: タイマの発火イベントを受けつけるオブジェクト 主要なメソッド void start() ← タイマを開始します void stop() ← タイマを停止します 想定される用途 「時計」、「花」など時間の経過を表す必要のあるもの 「エレベータ」などのように、空間を移動するものも、時間の経過による変 化を表す必要があります
j
Timer
の使い方
class クラス名 implements ActionListener{
:
timer = new Timer(1000, this); ← 1 秒毎に発火するタイマ :
timer.start(); ← タイマを開始
:
↓ 1 秒毎に呼び出されます
public void actionPerformed(ActionEvent event) {
Object source = event.getSource(); ← イベントの発生源を取得 if (source == timer) {
ここで 1 秒毎の処理
:
j
javax.swing.JButton
Swing におけるボタンで、ラベルにテキストやアイコンを使用できます 構築子 JButton(Icon icon) icon: ラベルとして使用するアイコン 主要なメソッド void addActionListener(ActionListener l) ← l でイベントを受けつけますvoid setIcon(Icon icon) ← アイコンを再設定します
想定される用途
j
javax.swing.ImageIcon
Icon
を実装し、画像ファイルをアイコンとして使用で
きます
構築子
ImageIcon(String filename) filename: 画像ファイルのパス名 ImageIcon(URL location) location: 画像ファイルの場所想定される用途
「自動販売機」、「モグラ叩き」など
GUI
を用いるプログラム一般
j
JButton/ImageIcon
o
の使い方
class クラス名 implements ActionListener{
:
icon = new ImageIcon(
getClass().getResource(画像ファイルの相対パス名));
↑ getClass().getResource() は、
jar ファイルからでもアイコンを正しく表示させたい場合に必要
button = new JButton( icon); button.addActionListener(this);
:
↓ ボタンがクリックされると呼び出されます
public void actionPerformed(ActionEvent event) { Object source = event.getSource();
if (source == button) {
button.setIcon(イメージアイコン);
↑ 例えばこのようにアイコンを切り替えます
j
おまけ
MouseListener (マウスのイベントを取得するインタフェース) レバーを引き下げたり、離したりするイベントの取得に使用 java.awt.event.MouseListener マウスのクリック、プレス、リリースなどを受け付けることができます 使い方は “SlotMachine.java” を参照してみてください今日のメニュー
はじめに 課題レビュー 課題の出題 ミニチェック 練習問題: 自動販売機を改造する 状態遷移からクラスへ スロットマシンで見る便利なクラス/インタフェース ファイルからの入力 実習ファイルからの入力
標準入力
aを含みます
a
j
INU
電卓を
o
使ってみよう
授業ページからダウンロードしよう
All-in-one jar
ファイル
(
inucalc.jar
)
実行
z:> java -jar inucalc.jar
展開
z:> jar xvf inucalc.jar展開して得られるソースコードの主ファイルは
“InuCalc.java”
です。
他にもスタック計算機本体と例外のソースファイ
ルがあります
j
INU
電卓の機能
o
の紹介
エラー処理をきちんと行なっています
例外の使い方の参考にしてください
計算履歴や計算結果を選択し、コピーできます
メニューの使い方の参考にしてください
次のオプションで
CLI
版が起動します
z:> java -jar inucalc.jar -cli
コマンドプロンプトから計算式を入力できます
終わる時は
“quit”
を入力します
j
InuCalc
で用いている
o
部品
BufferedReader/InputStreamReader (ファイルリーダ) CLI 版でのユーザからの入力に使用 あと、注釈で書き忘れましたが . . .public, private に加えて、protected というのを用いています protected を指定すると、派生クラスのみへの公開となります
j
java.io.BufferedReader
効率的な読み込みができるファイルリーダです 構築子 BufferedReader(Reader in) in: ファイルリーダ 主要なメソッド String readLine()← 1 行分を入力しますj
java.io
o
.InputStreamReader
ファイルリーダです 構築子 InputStreamReader(InputStream in) in: 入力ストリーム 入力ストリームとして System.in を指定すると、標準入力から入力できますj
java.io.FileInputStream
ファイルから作る入力ストリームです System.in の代わりに InputStreamReader の構築子で指定すると、任意のファ イルから読み込めるようになります 構築子 FileInputStream(String name) name: 入力するファイルのパス名j
標準入力からの入力
o
を受ける方法
:
BufferedReader reader
= new BufferedReader(new InputStreamReader(System.in)); System.out.print(プロンプト文字列);← プロンプトを表示 try {
String s = reader.readLine();← 1 行分の入力を取得
入力した文字列を処理 } catch (IOException unused) {
エラーメッセージの表示など }
: