狠狠撸

狠狠撸Share a Scribd company logo
Javaプログラミング入門【第2
回】
今日の内容
?
?
?
?
?
?

変数と型
if文
swich文
for文
while文
String型
変数とは
?
?

何かを入れておく箱のようなもの
変数という箱に対してできること
?
?
?

?

変数を作る(変数宣言)
値を入れる(代入)
値を見る(参照)

変数名は数字で始めることは出来ない
変数を作る(変数宣言)
?

int x;
?

?

int型のxという変数宣言

変数の型
?

その箱は何を入れる箱なのか?
値を入れる(代入)
?

x = 4;
箱に何かを入れること
? 変数に値を入れる場合は、必ず変数は左辺に書
くこと
=(イコール)演算子
x = 4;
x = 3;
xの値は?
変数とメモリ
? 『変数』は、コンピュータのメモリを抽象化し
たものと言える
?

?

?
値を見る(参照)
? 変数の値
? 変数の中に入っているもの

? 変数を参照する
? 変数の中に入っているものを見ること
? System.out.println(x);
? xの値が表示される
変数の初期化
? 初期化
? 変数宣言と同時に値を定める
? int x = 3;
? 3という値で初期化されたint型変数x

? int x;
? 未定義の変数
代入演算子
? 代入演算子
? x = 3;
? x←3; という意味

? 値が等しいかどうかを調べる(等価)
? x == y
演習1
? 変数x=15,y=32を宣言し、2つの変数を加算し
て、2で除算したプログラムを書きなさい
浮動小数点数
? 小数計算する場合はdouble型を使用する
? double x = 15.0;
演習2
? 演習1で宣言した変数をdouble型に変更して計算
結果を表示しないさい
文字型変数の初期化
? 文字型を(char)を生成する場合は、『??(シング
ルクォート)』で囲む
? char a = ?a?;

? 文字列を生成する場合は『””(ダブルクォー
ト)』で囲む
? 文字と文字列は別物
? Javaのchar型はUnicodeという文字コード
Java言語の型
? 基本型(primitive type/プリミティブタイプ)
? 論理値及び数値を表す型

? 参照型(reference type/リファレンスタイプ)
? クラス、インターフェース、配列やenum型を表
す型
基本型の一覧
型名

意味

boolean

論理型(trueまたはfalse)

char

整数型(文字型)(0以上65535以下) 符号なし16ビット(Unicode)

byte

整数型(-128以上127以下) 符号付き8ビット

short

整数型(-32768以上32767以下) 符号付き16ビット

int

整数型(-2147483648以上2147483647以下) 符号付き32ビット

long

整数型(-9223372036854775808以上9223372036854775807以下) 符号
付き64ビット

float

単精度浮動小数点数型

double

倍精度浮動小数点数型
名前と年齢を尋ねるプログラム
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class HowOldAreYou {
public static void main(String[] args) {
System.out.println("あなたの名前は?");
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
try {
String line = reader.readLine();
System.out.println(line + "さん、こんにちは");
System.out.println("年齢は?");
line = reader.readLine();
int age = Integer.parseInt(line);
System.out.println("今、" + age + "歳とすると、20年後は" + (age + 20) + "歳ですね");
} catch (IOException e) {
System.out.println(e);
} catch (NumberFormatException e) {
System.out.println("年齢が正しくありません");
}
}
}
実行
? Eclipseで実行し、コンソール入力に文字や数字
を入力してEnterキーを押してください。
? プログラムが入力するのを待っている状態のこ
とを入力待ちの状態と言う
解説
? readLineメソッド
? String line = reader.readLine();
? 文字列を1行分取得するメソッド

? readerは?
? BufferedReader型の変数
? 参照型のクラス
? データの読み込みを行うためのクラス

? new
? newの後にクラス名と()を付けると、そのクラスに属
するオブジェクト生成を行う
→これをインスタンス生成と言う
解説
? String
? 文字列を表すクラス

? Integer.parseInt
? 文字列を整数(Integerクラス)に変換するメソッド
intとInteger
? int型は32ビットの整数を表す基本型
? Integerクラスはint型を利用しやすくするための
クラス
? int型に関連した機能を持っている

? 基本型に対応したこのようなクラスをラッパー
(wrapper)クラスと言う
? Boolean, Byte, Character, Double, Float, Integer,
Long, Shortなどが他にある
例外処理/import
? try~catch
? エラー処理を行う機能

? import
? クラスライブラリを利用する際に使用する
コメント
? 一行コメント
? // (スラッシュ?スラッシュ)

? 通常コメント
? /* ~*/ (スラッシュ?アスタリスク)

? ドキュメンテーションコメント
? /** ~*/ (スラッシュ?アスタリスク)
? JDKのJavadocというツールを使って自動的にド
キュメントを生成する機能
演習3
? 2人の名前と年齢を入力するとその人たちの年
齢の平均を表示するプログラムを記述しなさい。
なお、平均値は小数点以下まで表示すること
if文
? 日本語の『もしも…ならば』
if (条件式) {
条件が成り立つ時の処理

}

? 条件式は必ずboolean値(true/false)の値になる
比較演算子
Java

数学

意味

p == 50

p = 50

pが50に等しいならtrue、それ以外はfalse

p != 50

p ≠ 50

pが50に等しくないならtrue、それ以外はfalse

p >= 50

p ≧ 50

pが50以上であればtrue、それ以外はfalse

p <= 50

p ≦ 50

pが50以下であればtrue、それ以外はfalse

p > 50

p > 50

pが50より大きいならtrue、それ以外はfalse

p < 50

p < 50

pが50より小さいならtrue、それ以外false
if ~else文
? 日本語の『もしも…ならば、それ以外は』
If (条件式) {
条件式に当てはまった時の処理
} else {
条件式に当てはまらなかった時の処理
}
演習4
? 降水確率を入力すると、傘を持って行った方が
いいか教えてくれるプログラムを記述しなさい。
傘を持って行った方が良い場合は、降水確率が
50%以上の場合とする(50%は含む)
if文の連鎖
? if文は連鎖で書ける
if (条件式1) {
条件式1を満たす時の処理

} else if (条件式2) {
条件式2を満たす時の処理

} else {
条件式1、2共に当てはまらない時の処理

}
演習5
? 演習4のプログラムで、降水確率が0~100%以
外の数値を入力された場合、『降水確率は0~
100の間です』という警告を表示するプログラ
ムを追記しなさい。
論理演算子『||(または)』
? 2つの条件を結びつけ、その2つのうちどちらか
一方でも(両方でも可)成り立っていればよい
? 論理和、OR条件という
論理演算子『%%(かつ)』
? 2つの条件式を結びつけ、その2つのどちらも成
り立つ
? 論理積、And条件と言う
演習6
? 『今、飲みたいのは何ですか?』とコンソール
表示し、1が入力された場合は、『オレンジ
ジュースです』、2が入力された場合は『コー
ラです』、3が入力された場合は、『どちらで
もありません』と表示するプログラムを記述し
なさい
switch文
? 多くの選択肢から1つを選んで実行する場合、
switch文を使用するとプログラムが見やすくなる
switch (式) {

case 定数式1:

case1の時の処理
break;

case 定数式2:

case2の時の処理
break;

default:

}

case1、2共に当てはまらない時の処理
break;
switch文
? Switch文を実行する時、()でくくられた式が計
算される。
? これを『式の評価』という

? break
? 処理の中断を表す

? 文字(char)による式の評価も出来る
定数式
? 『コンパイルした時点で値が決まる』のが定数
式
? 定数式:1+2+3

? x+2+3は定数式ではない
? xの値が評価する時点で式の値が変化するため
補足:String型のswitch文
? Java7からString型でもswitch文が使用できるよ
うになった
? case “orange”:
? 定数式にString型(文字列)を使用できる
演習7
? 演習6で記述したプログラムをswitch文に書き換
えなさい
演習8
? はじめに、『0~6の数値を入力しなさい。対応
した曜日を表示します』と表示し、コンソール
入力から入力された数値を入力すると、その数
字に応じて『日曜日』…『土曜日』と表示して
終了するプログラムを記述しなさい。また、0
~6以外の数値を入力された場合は、その旨を
警告するようにしなさい。
for文
? 条件を満たす間繰り返す
for (初期化; 条件式; 次の一歩) {
繰り返す処理

}
for文で0から3までを表示する
public class Count3 {
public static void main(String[] args) {
for (int i = 0; i < 4; i++) {
System.out.println(i);

}
System.out.println(“end”);

}

}
解説
? 初期化:int i = 0;
? 繰り返しの準備。繰り返し前に一度だけ実行され
る

? 条件式:i < 4;
? 繰り返しを続ける条件

? 次の一歩:i++;
? 繰り返す処理が1回終わった後に必ず実行される
処理
演習9
? 1から9までの2乗と3乗を表示するプログラムを
記述しなさい
二重のfor文
? for文の繰り返し範囲の中にfor文を記述することも
出来る
public class DrawGraph {
public static void main(String[] args) {
for (int i =0; i < 10; i++) {

System.out.println(i + “:”);
for (int j = 0; j < i; j++) {
System.out.print (“*”);

}

}

}

}
System.out.println(“”);
変数の有効範囲(スコープ)
pubic static void main(String[] args) {
for (int i = 0; i < 4; i++) {
System.out.println(i);

}
System.out.println(“i = ” + i);
↑iは有効範囲外なのでコンパイルエラー

}
? iはfor文の初期化部分で宣言されているため、
括弧の外では使用できない
演習10
? 九九を表示するプログラムをfor文を用いて記述
しなさい
while文
? 条件文が条件を満たす限り、ある処理を繰り返
して行う
while(条件式) {
繰り返す処理

}

? 条件式は产辞辞濒别补苍型の式(迟谤耻别/蹿补濒蝉别)
0から3までを表示する
Public class While1 {
public static void main(String[] args) {
int i = 0;
while (i < 4) {
System.out.println(i);
i++;
}
System.out.println(“end”);
}
}
入力をそのまま出力する
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class CopryDisplay {
public static void main(String[] args) {
BufferedReader reader = new BufferedReader(new
InputStreamReader(System.in));
try {
String line = reader.readLine();
while (line != null) {
System.out.println(line);
line = reader.readLine();
}
} catch (IOException e) {
System.out.println(e);
}
}
}
解説
? readLineは標準入力から文字列を取得するメソ
ッド
? readLineは、入力の終わりに到達した場合は
nullを返却する
? line = reader.readLine();
? 標準入力から次の1行を読み込む
複雑な条件式
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class CopyOfCopryDisplay2 {
public static void main(String[] args) {
BufferedReader reader = new BufferedReader(new
InputStreamReader(System.in));
try {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
System.out.println(e);
}
}
}
解説
? 条件式(line = reader.readLine()) != null
? 入力された文字を変数lineに代入し、その値を
nullと比較する
大文字を小文字に変換する
public static void main(String[] args) {
BufferedReader reader = new BufferedReader(new
InputStreamReader(System.in));
try {
String line;
while ((line = reader.readLine()) != null) {
String s = line.toLowerCase();
System.out.println(s);
}
} catch (IOException e) {
System.out.println(e);
}
}
toLowerCaseメソッド
? java.lang.Stringクラスのメソッド
? 文字列中の大文字を全て小文字に変換した新し
い文字列を作る
? 大文字以外の時は何もしない
? line変数を書き換えていないことに注意
Stringクラス、StringBufferクラス、
StringBuilderクラス
? 文字列を表すStringクラスは、書き換えること
が出来ない文字列
? 内容を書き換えることが出来るのは、
java.lang.StringBufferクラス、および
java.lang.StringBuilderクラスになる
Stringクラスにあるメソッドの一部
メソッド

動作

String replace(char oldChar, char
newChar)

文字列のoldCharをすべてnewCharに置換
した新しい文字列を返却する

String substring(int beginIndex)

文字列のbeginIndex番目の文字以降からな
る新しい文字列を返却する

String substring(int beginIndex, int
endIndex)

文字列のbegineIndex番目~endIndex-1番
目の文字からなる新しい文字列を返却する

String toLowerCase()

文字列中の大文字を全て小文字に変換した
新しい文字列を返却する

String toString()

文字列自体を返却する

String toUpperCase()

文字列中の小文字を全て大文字に変換した
新しい文字列を返却する

String trim()

文字列の両端からホワイトスペースを取り
除いた新しい文字列を返却する
演習11
? 標準入力された文字列から、『。』を『.(ピリ
オド)』に、『、』を『,(カンマ)』に変換する句
読点変換プログラムを記述しなさい。
Stringオブジェクトの管理とガーベッ
ジコレクション
? 大文字を小文字に変換するプログラムでは変数
はいくつ使用されていたか?
? while文が回る度に、Stringオブジェクトはその
分生成される
? オブジェクトを作る=コンピューター上のメモ
リ領域を確保する→いつかはメモリがなくなる
? メモリがなくなってくると、JVMは使われてい
ないオブジェクトを集めて、自動的にメモリを
あける→ガーベッジコレクションと言う
オブジェクトを『参照』する
? String型などのオブジェクトの型は参照型と言
われる
? 参照型の変数にはオブジェクトが直接代入され
ているわけではなく、メモリのどこかに存在す
るオブジェクトを指し示す値(メモリのアドレ
ス、ポインタ、インデックス、インジケータな
どとも呼ばれれる)が代入されている
オブジェクトを『参照』する
? String word = “Hello!”;
変数word

Hello!
オブジェクトを『参照』する
? word = “こんにちは”;
変数word

文字列Helloは書き変わらない

Hello!
→ガーベッジ(ごみ)になった
変数wordの値は
変わる

こんにちは
オブジェクトを『参照』する
? String newWord = word;
変数word

変数wordとnewWordが
同じ文字列を指す
変数newWord

こんにちは
オブジェクトを『参照』する
? word = null;
変数word

変数wordは何も参照していない

こんにちは
変数newWord
文字列検索関連のStringクラスのメ
ソッド
? char charAt(int index)
? boolean equals(Object object), boolean
equalsIgnoreCase(String string)
? int compareTo(String anotherString)
? boolean startsWith(String prefix, int
index), boolean startsWith(String prefix)
? boolean endWith(String suffix)
? int indexOf(ch ch), int lastIndexOf(int ch)
? int indexOf(String s), int lastIndexOf(String s)
? 詳しくは『java api string』でググる(http://eclass.center.yuge.ac.jp/jdk_docs/ja/api/java/lang/
String.html)
多重定義(オーバーロード)
? 複数のメソッドが同じ名前を使うことをメソッ
ドの多重定義(オーバーロード)と呼ぶ
? メリット:プログラマが覚えなければならない
メソッドの名前の数を減らすことが出来る
? コンパイラは引数の方と個数によって、実際に
使われているメソッドを認識する
? 引数の方と個数のことをメソッドのシグニチャ
と呼ぶ
文字列の一致はequalsを使う
? 変数xとyが等しいかどうかを調べる時
? 変数xとyが基本型の場合
? x == y

? 変数xとyが参照型の場合
? x.equals(y)
演習12
? 以下のプログラムをwhile文で書き換えなさい
public class DrawGraph {
public static void main(String[] args) {
for (int i =0; i < 10; i++) {
System.out.println(i + “:”);
for (int j = 0; j < i; j++) {
System.out.print (“*”);
}
System.out.println(“”);
}
}
}
do-while文
? 繰り返す処理を1回必ず実行する
→処理を行ってから、条件式を判定する
Do {
繰り返す処理

} while (条件式);
break文
? forやwhileの繰り返しを中断する仕組みにbreak
文がある
while (…) {
…
if (条件式) {
break;
}
…
}

←while文を抜ける
二重ループとbreak文
? forやwhileが二重になっている場合、breakで中断
するのは内側のループのみ
while (…) {
while (…) {
if (条件式) {
break;
}
…
}
…
}

内側のwhile文のみ中断
continue文
? ループをスキップするのがcontinue文
while (…) {
…
if (条件式) {
continue;
}
…
}

whileの残りの処理をスキップし、
次のループに入る
演習13
? 次のスライドのプログラムContinueTest.javaは
何をするプログラムか?また、
ContinueTest.javaをcontinueを使わない形式に
書き換えなさい
ContinueTest.java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class ContinueTest {
public static void main(String[] args) {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
try {
String line;
while ((line = reader.readLine()) != null) {
if (!line.endsWith("{") && !line.endsWith("}")) {
continue;
}
System.out.println(line);
}
} catch (IOException e) {
System.out.println(e);
}
}
}
参考文献
? Java言語

プログラミングレッスン[第3版]上

? 結城浩[著]

More Related Content

闯补惫补プログラミング入门【第2回】