- プログラム例 3.1 と全く同じ内容を Java を使用して書いてみました.まだクラスに関する説明を行っていませんので,その内容を詳細に説明することはできません.しばらくの間,形式的に以下のプログラムをまねして書いてください.
01 /****************************/
02 /* 2つのデータの和と差 */
03 /* coded by Y.Suganuma */
04 /****************************/
05 import java.io.*;
06
07 public class Test {
08 public static void main(String args[])
09 {
10 BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
11 double sa, wa, x, y;
12
13 try {
14 /*
15 データの入力
16 */
17 System.out.print("1つ目のデータを入力してください ");
18 x = Double.parseDouble(in.readLine());
19 System.out.print("2つ目のデータを入力してください ");
20 y = Double.parseDouble(in.readLine());
21 /*
22 和と差の計算
23 */
24 wa = x + y;
25 sa = x - y;
26 /*
27 結果の出力
28 */
29 System.out.println("和は=" + wa + " 差は=" + sa);
30 }
31 catch (IOException ignored) {}
32 }
33 }
- 1 〜 4 行目
- プログラムに対する注釈です.Java では,C++ と同じ記述方法を使用できます.
- 5 行目
- プログラム例 3.1 の 5 行目に対応する部分です.入出力を行う場合は必ず必要です.
- 7 行目
- 「Test」という名前のクラス定義の始まりであり,33 行目まで続きます.Java においては,すべての処理をクラス内で行わなければなりませんので,必ずクラスを定義する必要があります.クラスの名前は任意ですが,ファイル名と一致させなければなりません.この例の場合,上のプログラムは,「Test.java」というファイル名で保存する必要があります.
- 8 〜 32 行目
- プログラム例 3.1 の 7 行目から 26 行目に相当します.
- 10 行目
- データをどこから入力するのかを示しています.この例では,標準入力(キーボード)を意味しています.この行で使用されている「in」という名前は任意ですので,好きな名前を付けられます.もちろん,その場合は,以下の行における対応する箇所も変えてやる必要があります.
- 13 行目
- 入出力で発生する例外(例えば,ファイルから入力しようとしたが,指定されたファイルが存在しない等)処理を行います.13 行目から 30 行目までの間で発生した例外を,その例外の種類によって,31 行目で処理します.ただし,この例では,処理方法の中に何も書かれていません( 31 行目の「 { } 」)ので,何も行いません.したがって,実行を継続するのが不可能であるような例外が生じた場合はプログラムが強制的に停止されます.このように,Java においては,ほとんどの入出力を行うとき,必ずその際に発生する例外の処理を行ってやる必要があります(何も行わない処理を含む).
- 17 〜 20 行目
- プログラム例 3.1 の 13, 14 行目に相当します.Java においては,基本的に,すべてのデータを文字列として入力し,かつ,文字列として出力します.「in.readLine()」によって,キーボードから入力された return キーまでのデータを文字列として受け取ります.そこで,「Double.parseDouble」によって浮動小数点数に変換しています.また,整数に変換したいような場合は,「Integer.parseInt」を使用します.プログラム例 3.1 や 3.2 の場合は,2つのデータを1つずつ return キーで区切って入力しても,2つのデータを例えば「2 3」のようにペースで区切り一度に入力しても,全く問題はありません.しかし,Java においては,それらに対する処理を変えてやる必要があります.「2 3」と入力した場合は,この文字列データから 2 と 3 を切り出してやる必要があるからです(下の例参照).
- 29 行目
- プログラム例 3.1 の 23 行目に相当します.17 行目や 19 行目で使用した「print」との違いは,最後に改行を行うか否かの違いです.「println」の場合は改行を行います.wa や sa は,文字列に変換され,それらが加算演算子によって他の文字列リテラルと連結された形で出力されます.
- [ 1 行に 2 つのデータを入力する場合の例(その1)]
- 上の例と同じですが,データを整数に変え,かつ,1 行に 2 つのデータを入力しています.なお,わざわざ Data クラスなどを作成せず,次に示す(その2)のように,Java に準備されている関数(メソッド)を利用する方法もあります.
/****************************/
/* 2つのデータの和と差 */
/* coded by Y.Suganuma */
/****************************/
import java.io.*;
public class Test {
public static void main(String args[])
{
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
int sa, wa, x, y;
String line;
Data dt;
try {
/*
データの入力
*/
System.out.print("2つのデータを入力してください ");
line = in.readLine();
dt = new Data (line);
dt.next();
x = Integer.parseInt(dt.data);
dt.next();
y = Integer.parseInt(dt.data);
/*
和と差の計算
*/
wa = x + y;
sa = x - y;
/*
結果の出力
*/
System.out.println("和は=" + wa + " 差は=" + sa);
}
catch (IOException ignored) {}
}
}
/******************************************/
/* 1行のデータから個々のデータを取り出す */
/* coded by Y.Suganuma */
/******************************************/
class Data {
private int len, start, end;
private String line;
String data;
// コンストラクタ
Data (String l)
{
line = l;
len = line.length();
start = 0;
end = 0;
data = new String (); // 次のデータ
}
// 次のデータの取り出し
// =0 : 成功,=-1 : 失敗
int next()
{
int k = 0;
if (start < len) {
int sw = 0;
while (sw == 0) {
end = line.indexOf(" ", start);
if (end >= 0) {
if ((end - start) > 0) {
data = line.substring(start, end);
sw = 1;
}
}
else {
end = len;
sw = 1;
if ((end - start) > 0)
data = line.substring(start, end);
else
k = -1;
}
start = end + 1;
}
}
else
k = -1;
return k;
}
}
- [ 1 行に 2 つのデータを入力する場合の例(その2)]
- 上の例と同じですが,Java の StringTokenizer クラスを利用しています.
/****************************/
/* 2つのデータの和と差 */
/* coded by Y.Suganuma */
/****************************/
import java.io.*;
import java.util.*;
public class Test {
public static void main(String args[])
{
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
int sa, wa, x, y;
String line;
StringTokenizer str;
try {
/*
データの入力
*/
System.out.print("2つのデータを入力してください ");
line = in.readLine();
str = new StringTokenizer(line, " ");
x = Integer.parseInt(str.nextToken());
y = Integer.parseInt(str.nextToken());
/*
和と差の計算
*/
wa = x + y;
sa = x - y;
/*
結果の出力
*/
System.out.println("和は=" + wa + " 差は=" + sa);
}
catch (IOException ignored) {}
}
}