• 検索結果がありません。

Microsoft Word - java a.doc

N/A
N/A
Protected

Academic year: 2021

シェア "Microsoft Word - java a.doc"

Copied!
12
0
0

読み込み中.... (全文を見る)

全文

(1)

Java プログラミング入門

第4章

入出力

この章のポイント

入出力の基本として、ディスプレイへの文字出力と、キーボー

ドからの文字入力の方法を学びます。

・ 入出力とは何か

・ 標準出力

・ 標準入力

(2)

4.1. 入出力とは何か

入出力とは、プログラムと外部機器の間でデータをやりとりすることをいいます。 プログラムから出て行く方向が「出力」、プログラムに入って来る方向が「入力」です。 外部機器はさまざまな種類があります。出力を行うには、ディスプレイ・プリンタ・スピーカなどが、 入力を行うには、キーボード・マウス・マイクなどが使われています。 プログラムでは通常、 ・標準の出力機器として、「ディスプレイ」 ・標準の入力機器として、「キーボード」 が指定されています。これらとやりとりすることを「標準入出力」と呼びます。Java 言語では、 ・標準出力を、System.out ・標準入力を、System.in というキーワードで示します。 この章では、標準出力と標準入力を使って、文字をやりとりする方法を説明します。 プログラム ディスプレイ キーボード 標準出力 System.out System.in 標準入力 プログラム 外部機器 出力 入力 外部機器

(3)

4.2. 標準出力(ディスプレイへの文字表示)

4.2.1. 基本的な出力命令

次の命令は、カッコの中に書いた文字列または変数の値を、ディスプレイへ表示します。 ◆文字のディスプレイ表示(改行あり)

System.out.println("文字列"または変数);

◆文字のディスプレイ表示(改行なし)

System.out.print("文字列"または変数);

使用例 使用例 上記の命令で、複数の文字列や変数を連結させるには、文字列連結演算子の+を使います。 (ここでの記号+は、数学の加算とは違います。文字列をつなぐだけです)。 使用例 値の途中で改行してはダメです。 1つの値は、複数行にまたがることはできません。 int a = 5; System.out.println("a"); System.out.println(a); a 5 System.out.println("こんにちは。"); System.out.println("さようなら。"); System.out.print("こんにちは。"); System.out.print("さようなら。"); こんにちは。⏎ さようなら。⏎ こんにちは。さようなら。 int a = 5, b = 10; System.out.println(a + " " + b); System.out.println("変数の値は" + a + "です。"); 5 10 変数の値は 5 です。 System.out.println(“こんにちは。さようなら”); System.out.println(“こんにちは。 さようなら”); 値の途中で改行しているからダメ これはふつうの書き方なので OK print()は行末で改行されないので、次の文字列が右側に表示されます println()は行末で改行 値は、そのまま表示 変数は、中身が表示 連結 連結 変数aの値 変数 b の値 半角スペース 変数aの値 文字列 文字列

(4)

4.2.2. 書式指定付き出力命令

Java では、表示する桁数などの書式指定を行う方法が複数あります。 ここでは、C 言語とほぼ同じ書式で利用できる printf 文について説明します。 ◆printf 文の書式

System.out.printf("文字列または変換指定子",変数,変数,・・・);

printf 文の文字列中では、%に続く文字は「変換指定子」と呼ばれる特殊な文字です。 変数を指定された書式へ変換してから表示する役割を持ちます。 ◆主な変換指定子 変換指定子 意味 使われる型 %c 1 文字を出力する char %s 文字列を出力する String %d 整数(10 進数)で出力する byte short int long %x 整数(16 進数)で出力する %o 整数(8 進数)で出力する %f 浮動小数点型を出力する float double %e 浮動小数点型を指数形式で出力する %b 判断型を出力する boolean ・ 普通の文字として%を表示したいときは、 %% のように2つ並べる。 さらに桁数などを、%の直後につけて指定できます。 記号(数値) 説明 使用例 - 左詰めに表示(普通は右詰め) %-d + プラス符号も表示 (普通はマイナス符号のみ表示) %+d %+ld 整数 桁数を指定します (整数を表示するとき、先頭に 0 を付けると空いている 桁を 0 でうめます) %10d %8s %04d 実数 実数の小数点以下の桁数を指定します 整数部: 小数点を含めたすべての桁数 小数部: 小数点以下の桁数 %9.2f %12.6f 整数の 12 を、%d の書式指定を使い分けて表示すると、次のようになります。

%d

12

・・・ 左寄せで表示します

%4d

12

・・・ 指定された桁数内で、右寄せで表示します

%04d

0012

・・・ 空いた桁をゼロで埋めて表示します

(5)

浮動小数点型用の%f は、桁数指定の範囲に気をつけましょう。

%9.3f

12345.678

変換指定子は、printf 文の文字列中で複数指定できますが、 対応する変数と、個数と順序を一致させる必要があります。 int i; double a, b; (中略) System.out.printf("%04d %9.2f %9.2f ¥n", i, a, b); 使用例 1) 1つの変数だけ表示 10 2) 文字列と変数を一緒に表示 answer = 1.23 3) 複数の文字列と変数を一緒に表示 番号は 1、 a は 1.23 、 b は 4.56 です。 int a = 10; System.out.printf("%d¥n", a); double x = 1.23; System.out.printf("answer = %f¥n", x); int i = 1; double a = 1.23, b = 4.56; System.out.printf("番号は%d、 a は%f 、 b は%f です。¥n", i, a, b); 小数部の桁数 全体の桁数(小数点も含む)

(6)

例題 4-1 文字列の書式設定付き画面表示

print、println、printf 文を使って文字列を画面表示します。 実行結果

PrintTest1.java

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 /* 例題 4-1 文字列の書式設定付き画面表示 組 番号 氏名 */

public class PrintTest1 {

public static void main(String[] args) { // 文字列を表示 String s1 = "東海太郎"; System.out.print("メッセージ: "); System.out.println("私の名前は、" + s1 + "です。"); System.out.println(); // 改行だけ行う

System.out.printf("%s, World.¥n", "Hello"); // 文字列 Hello を表示

System.out.printf("%10s, World.¥n", "Hello"); // 桁数を指定(右寄せ)

System.out.printf("%-10s, World.¥n", "Hello"); // 桁数を指定(左寄せ) } } 文字列を連結してから表示 カッコ()の中に何も書かないと 改行だけ行われる %s の部分が、文字列に置き換わ って表示される %s の間に数字を入れると桁数を 指定できる

(7)

例題 4-2 数値の書式設定付き画面表示

printf 文を使って書式設定付きで数値を画面表示します。

PrintTest2.java

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 /* 例題 4-2 数値の書式設定付き画面表示 組 番号 氏名 */

public class PrintTest2 {

public static void main(String[] args) {

// 整数の書式設定 int a = 12;

System.out.printf("%d¥n", a); // 変数aの値を表示 System.out.printf("%4d¥n", a); // 桁数を指定(右寄せ) System.out.printf("%04d¥n", a); // 桁数を指定(右寄せ。空いている桁をゼロで埋める) System.out.println(); // 改行だけ行う // 浮動小数点数の書式設定 double x = 0.0123; System.out.printf("%f¥n", x); // 変数xの値を表示 System.out.printf("%9.3f¥n", x); // 桁数を指定 System.out.printf("%.3f¥n", x); // 小数部の桁数だけ指定 System.out.printf("%e¥n", x); // 指数表現で表示 } } 実行結果 %d の部分が、整数に置き換わっ て表示される。 %d の間に数字を入れると桁数を 指定できる %f の部分が、浮動小数点数に置 き換わって表示される。 %f の間に数字を入れると、全体と 小数部の桁数を指定できる %e の部分が、浮動小数点数に置 き換わって指数表現で表示される

(8)

4.3. 標準入力(キーボードからの文字入力)

Java では様々な入力方法が用意されています。ここでは代表的な 2 つの方法について説明し ます。

(1) 型を指定してキー入力

Scanner は文字を区切り記号ごとに、文字列を取得する機能を持っています。 これをキー入力に利用すると、直接型を指定してキー入力した値を変数に入れることができます。 ◆基本データ型への入力命令 メソッド名 機能 取得する型 next() 文字列を読み込みます String

nextByte() byte 型の整数を読み込みます byte

nextShort() short 型の整数を読み込みます short

nextInt() int 型の整数を読み込みます int

nextLong() long 型の整数を読み込みます long

nextFloat() float 型の浮動小数点数を読み込みます float

nextDouble() double 型の浮動小数点数を読み込みます double

nextBoolean() boolean 型の値を読み込みます boolean

これらの命令は、半角スペースで区切られた値を1つ取得します。 値を入力してから、Enter キーを押すと取得されます。Enter キーを押さないと、入力待ち状 態で、プログラムの実行が一時停止したまま先へ進まなくなります。 プログラム実行時に間違った型をキー入力すると、エラーが出て異常終了します。 命令を呼び出す前に、準備をする命令が必要になります。次に nextInt()で一つの整数を読 み込む場合の書き方を説明します。 ◆一行分の文字列を読み込む場合の書き方 import java.util.Scanner; class Sample {

public static void main(String[] args) { Scanner sc = new Scanner(System.in);

int a = sc.nextInt(); } } 注 1) ②の命令で、sc は変数名なので違う名前にしても大丈夫です。ただし、③の命令の sc と ① ソースコードの最初に書く ② キー入力する前に書く。 ブロック内で一度書けば良い。 ③ キー入力したい所に書く 注 1)

(9)

例題 4-3 キー入力

キー入力を行い、様々な型で読み込みます。

InputTest1.java

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 /* 例題 4-3 キー入力 組 番号 氏名 */ import java.util.Scanner;

public class InputTest1 {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in); // 文字列の取得 System.out.println("文字列を入力して下さい。"); String s = sc.next(); System.out.println("「" + s + "」がキー入力されました。"); // 整数の取得 System.out.println("整数を入力して下さい。"); int a = sc.nextInt(); System.out.println("「" + a + "」がキー入力されました。"); // 浮動小数点数の取得 System.out.println("実数を入力して下さい。"); double x = sc.nextDouble(); System.out.println("「" + x + "」がキー入力されました。"); } } 実行結果例 キー入力命令を使う場合に、ソースコード 先頭部分で必要 自分で値を入力して、Enter キーを押す 入力元を、キーボードに設定 キー入力した値を String 型で読み込 みで、値を変数 s へ代入 キー入力した値を int 型で読み込んで、 値を変数 a へ代入 キー入力した値を double 型で読み込 んで、値を変数 x へ代入

(10)

(2) 文字列としてキー入力を取得

一文字や、一行をまるごと「文字列」として取得する方法です。 あとで説明するファイル入出力などに応用しやすいのですが、複数の場所に命令文をたくさん 書かなければならないのが欠点です。 ◆一行分の文字列を読み込み

readLine();

・一行の区切りを Enter キーの入力で判別する ◆一文字を読み込み

read();

これらの命令は、単独で使うことができません。命令を呼び出す前に、準備をする命令が必要に なります。次に readLine()で一行分の文字を読み込む場合の書き方を説明します。 一行分の文字列を読み込む場合の書き方 import java.io.*; class Sample {

public static void main(String[] args) throws IOException { BufferedReader br =

new BufferedReader(new InputStreamReader(System.in));

String s = br.readLine(); } } 注 1) ③の命令で、br は変数名なので違う名前にしても大丈夫です。ただし、④の命令の br と関連付 けられているので、③と④で同じ変数名にしないといけません。 また、③の命令はブロック内では 1 つだけ書けば良いので、キー入力を繰り返したい場合は④ の命令だけを複数書けば良いことになります。 注 2) readLine()は一行分の文字つまり「文字列」を読み込むので、値を保管するのは String 型 の変数が必要になります。s は変数名なので違う名前にしても大丈夫です。 また、readLine()は一行の区切りを Enter キーの入力で判別するので、文字をキーで打って も、Enter キーが押されるまでは変数に読み込まれません。したがって、Enter キーが押される まではプログラムが一時停止した状態になります。 ① ソースコードの最初に書く ② main()メソッドの) と { の間に書く ③ main()メソッドのブロック内で、先頭の方に書く ④ キー入力したい所に書く 注 1) 注 2)

(11)

◆ 第 4 章の練習問題

次の仕様を満たすプログラムのソースコードを記述しなさい。画面表示は下図に示す実行例の書 式にしたがうこと。ソースファイル名は、Human.java とする。

・入力: 次の 3 つの値をキー入力する

氏名(String 型)、年齢(int 型)、身長(double 型)

・出力: 入力した値を結合して、次のように一文の文章として画面表示する 「(氏名)は、(年齢)歳で、身長は(身長)cm です。」 ・カッコで示した部分には、入力した値が入る ・身長の値は、小数点以下 1 桁まで表示すること ・変数名は、自分で適当な名前を考えて付ける 実行例(太字は入力した値) 氏名は? 東海太郎 年齢は? 21 身長は? 162 東海太郎は、21 歳で、身長は 162.0cm です。 以上

(12)

◆ 第 4 章の確認問題

<入出力とは何か> (1) プログラムから外部機器へ出て行く方向のデータの流れを何と呼ぶか書きなさい (2) 外部機器からプログラムへ入って来る方向のデータの流れを何と呼ぶか書きなさい (3) 通常の標準出力の装置は何か書きなさい (4) 通常の標準入力の装置は何か書きなさい (5) Java において、標準出力を示すキーワードを書きなさい (6) Java において、標準入力を示すキーワードを書きなさい <標準出力> (7) 文字列 Hello を表示してから改行する命令を一文で書きなさい (8) 文字列 Hello を表示するが改行しない命令を一文で書きなさい (9) 数値 123 を表示してから改行する命令を一文で書きなさい (10) 数値が入った変数 x を、全体の桁数 6、小数部の桁数 2 で表示する命令を一文で書きなさ い。変数の宣言は書かなくて良い。 <標準入力> (11) Scanner を利用する時、ソースコード先頭付近で必要な命令を 1 つ書きなさい (12) Scanner で読み込み先を標準入力に指定する命令を 1 つ書きなさい

(13) Scanner を利用する時、int 型の値を読み込んで、int の変数 b に代入する命令を一文 で書きなさい

参照

関連したドキュメント

731 部隊とはということで,簡単にお話しします。そこに載せてありますのは,

問題はとても簡単ですが、分からない 4人います。なお、呼び方は「~先生」.. 出席について =

お客様100人から聞いた“LED導入するにおいて一番ネックと

これはつまり十進法ではなく、一進法を用いて自然数を表記するということである。とは いえ数が大きくなると見にくくなるので、.. 0, 1,

はい、あります。 ほとんど (ESL 以外) の授業は、カナダ人の生徒と一緒に受けることになりま

Windows Mobile デバイスセンターまたは ActiveSync をインストールすることで、パソコ ンと FC-250 との間でパートナーシップの設定や、Microsoft Outlook

基準の電力は,原則として次のいずれかを基準として決定するも

Dual I/O リードコマンドは、SI/SIO0、SO/SIO1 のピン機能が入出力に切り替わり、アドレス入力 とデータ出力の両方を x2