Javaについて

第1項 Javaとは

1.Javaとは

Javaとはプログラムを作るための言語の一種です。
Javaの特徴はオブジェクト指向のプログラム言語であること、実行するOSに依存しないことなどが挙げられます。これらの特徴については後から詳しく学習します。

Javaのスローガンに"Write once, run anywhere”というフレーズがあります。 これは、「プログラムを一度書けば、どこででも実行できる」という意味で、Javaの特徴を表す一言になっています。
JavaはWebアプリやデスクトップアプリはもちろん、スマホアプリや家電製品などにも使われています。 また、企業での大規模なシステム開発などにも用いられ、根強い人気があります。

2.Javaのソースコード

Javaで書かれたソースコード(プログラム)は人間に読みやすくなっていますが、コンピュータがそのまま読むことはできません。コンピュータが命令を読み解くためには、コンパイルと呼ばれる機能を使って、コンピュータが理解できる機械語に翻訳する必要があります。
Javaを実行する流れはまず、Java言語で書いたソースコード(拡張子は.java)をコンパイルします。すると、Javaバイトコード(拡張子は.class)と呼ばれるコードに変換されます。この時点で人間には通常読めないコードに変換されています。作成したJavaバイトコードはJVM(Java仮想マシン)と呼ばれるソフトウェアを通し、書くOSに対応したコード(ネイティブコード)に変換されます。JVMに通すことによってOSに依存しないプログラムの作成が可能となっています。
JVMとは通常販売されているパソコンに既にインストールされているものです。つまり、Javaで作成したプログラムはOSなどには依存せず、どこでも動くということです。

Javaで書かれたプログラムを実行するには、プログラムを記述するテキストエディタ、JDKなどの準備が必要です。プログラム実行までの準備を取り扱ったWebサイト等はたくさんありますので、具体的な準備の方法については割愛します。また、記述から実行までの流れについて具体的な方法は記載せず、お使いの環境に沿ったコンパイル、実行の方法で実行していただきます。

第2項 Javaのプログラム

1.Hello world

この項から実際にJavaのプログラムを見ていきます。
以下のコードは初めてプログラムを作成する際によく用いられる、画面上に「Hello world」と表示するプログラムです。


public class Helloworld {
   public static void main(String[] args) {
       System.out.println("Hello world");
   }
}

2.解説

プログラムと聞いてもっと複雑なものを想像したかもしれません。 しかし、このような短い記述もプログラムの1つです。


System.out.println("Hello world"); 

この一文が画面上に「Hello world」と表示する命令をしている部分です。
カッコの前のprintln(プリントライン)という命令で出力しています。記述したコードをコンパイルし、実行すると画面上に「Hello world」と表示されます。(表示される画面は使用する環境によって異なります)

第3項 プロジェクトの作成

この講座では1つの「プロジェクト」に章ごとの「パッケージ」というものを作成し、学習していきます。

1.プロジェクトとは

プロジェクトとはプログラムファイルを格納するフォルダです。プログラムのまとまりに名前をつけて保存します。この講座では「Foundation」というプロジェクトを作成し、これから作成したプログラムを収納していきます。お使いの環境でプロジェクトを作成し、「Foundation」という名前をつけてください。

2.パッケージとは

パッケージとは、プログラムを部品単位で収納したものです。
例えば、カレンダーと日ごとの予定を管理するプログラムを作成するとします。すると、カレンダーを表示するプログラムを収納するパッケージ、予定を登録するプログラムを収納するパッケージを作成することもあります。例に挙げたカレンダーのような小規模なプロジェクトならすべて1つのまとまりにしても複雑にはなりません。しかし、後々機能を拡張していき、大規模になってくると、機能ごとにまとまったパッケージに収納しているほうがプログラムを扱いやすくなります。プログラムはパッケージに収納され、パッケージはプロジェクトに収納されます。プロジェクトの構成図が浮かんできたでしょうか。では、先程作成したプロジェクトの中にパッケージを作成してください。今回は1章ですので、「jp.CRI_school.java.chapter1」という名前のパッケージを作成します。この講座ではパッケージ名を指定してありますが、パッケージ名はお好きなようにつけていただいて構いません。作成するごとにかぶらないようにしましょう。パッケージの作成時、環境によって「.」(ピリオド)でつなぐと自動でいくつものファイルを作成する機能があります。そうでない方はプロジェクトを除いたフォルダ階層が上層から「jp」、「CRI_school」、「java」、「chapter1」となるようにそれぞれ作成してください。

3.クラス

パッケージに収納するプログラムはクラスと呼ばれます。基本的にはこのクラスをコンパイルし、実行するのですが、環境によっては自動的にコンパイルされることもあります。作成したパッケージの中にクラスを作成します。今回は「Sample_01」というクラスを作成してください。

4.実践

それでは実際に作成したクラスに実際にコードを記述します。はじめに確認した、画面上にHello worldを出力するプログラムを記述し、実行しましょう。 Sample_01に以下のように記述してください。


package jp.CRI_school.java.chapter1;

 public class Sample1_01{
     public static void main(String[] args) {
         /**
          * ハローワールド
          */
         System.out.println("Hello world");
     }
 }

記述したら、コンパイルして実行してみてください。画面上に「Hello world」と出力されます。 実際に出力処理を行っている部分に関しては解説していますので、ここでは残りの記述を部分に分けて簡単に解説していきます。

5.解説


package jp.CRI_school.java.chapter1;

ここでは、パッケージ宣言というものを行っています。これはこのクラスがどのパッケージに収納されているかを表す一文です。今回のクラスではjp.CRI_school.java.chapter1というパッケージに収納したので、そのパッケージ名が記述されています。


public class Sample1_01 { }

ここでは、クラス宣言をしています。これはこのクラスの名前を記述してあります。最後の開きカッコ( { )はクラスの始まりを表しています。対となる閉じカッコ( } )までの間がこのクラスの中身になります。



/**
 * ハローワールド
 */

Javaでは「/*」と「*/」に囲まれた行はコメントになります。また、行の中で「//」を記述すると、行末までコメントとなります。特定の一行だけをコメントにする場合に用います。
コメントは直接プログラムの処理には関わりません。お好きなように記述することが可能ですし、削除してしまっても処理に影響はありません。


public static void main(String[] args) { }

上記のように宣言をし、カッコの中にクラスが実際に行う処理を書いていきます。この部分をメソッドと言います。
コンピュータはメソッドに記述されている処理を行っていきます。メソッドについては後から詳しく説明します。

第2節 プログラミングの実践

第1項 実習1

1.プログラムの作成

前節まででJavaの実行までの流れが少し掴めたかと思います。この節からは実際にプログラムを作っていきます。
今回は、3つのランダムな数字を表示するルーレットのようなプログラムを作成してみましょう。先程のプログラムと比べて難しくなりますが、1つのランダムな数字を表示する処理は1行で終わります。あとはその処理を3つに増やすだけです。このプログラムの作成にはどんな処理が必要か考え、実践して行きましょう。

2.処理を考える

今回は大きく2つの処理を行います。

  • 1.ランダムなナンバーを取得する。
  • 2.ナンバーを表示する。

3つのナンバーを取得するので、上記の処理を3回行います。
表示する部分は前回と同様、


System.out.println();

この文を使います。
ナンバーの表示については解決しました。これで残る処理は1つです。
ランダムなナンバーの取得ですが、これには便利な命令が用意されています。


Math.random()

この命令を使用すると、0以上、1未満の数、例えば0.6072554567197147のようなランダムな数を取得します。
ラッキーナンバーとなるとこのままでは複雑です。しかし、ここに処理を加えることで1桁のきれいな数字に変えることができます。どうすれば変わるかイメージしてみてください。

第2項 実習2

イメージできたでしょうか。それでは解説していきます。

1.処理を切り分ける

0以上1未満の数字ですから10をかければ0以上10未満の数が取得できますね。
先程例に挙げた数字だと、6.072554567197147のような形です。「6」という数字が現れましたが、小数点以下の数字で複雑に見えます。小数点以下を切り捨てると1桁の数字を取得することができそうですね。

処理を大きく「ランダムなナンバーを取得する。」としましたが、細かく分けていくと以下のようになります。

  • ・ランダムな数を取得する(0以上1未満の数)
  • ・10をかける(1の位が現れる)
  • ・小数点を切り捨てる
  • ・表示する

実際にプログラミングをする際は、結果にたどり着くまでのプロセスを考えます。いきなり結果を考えるのではなく、ひとつひとつ丁寧に考えていくことが重要です。

2.プログラムを書く

どのような処理を行うかが決まったので、プログラムを書いていきましょう。
10をかけるには


 * 10

このように記述します。「✕」の代わりに「*」を使います。
切り捨てをするには


Math.floor()

カッコの中に入力した数値を切り捨てます。
では、0~9までのランダムな数値を取得するには


Math.floor(Math.random() * 10)

このように記述します。数学と同じでカッコの中から処理されます。つまり、ランダムな数値に10をかけ、その数値を切り捨てるといった順序になっています。
数値が取得できたので、あとは表示するだけです。


System.out.println(Math.floor(Math.random() * 10));

最終的にこの一行でナンバーを取得し、表示する処理を記述しています。
この処理を合計3つ用意しましょう。

3.プログラムの実行

記述した3行だけではプログラムは実行できず、この他にクラス宣言などを行う必要があります。手順は前節で学習したとおりです。
jp.CRI_school.java.chapter1パッケージの中に、Sample1_02クラスを作成して、その中にプログラムを記入してください。
完成したら、保存して実行してみましょう。

第3項 実習3

引き続き、プログラミングの仕方について学習していきます。

1.ソースコード


 package jp.CRI_school.java.chapter1;

 public class Sample1_02 {

     public static void main(String[] args) {
         System.out.println(Math.floor(Math.random() * 10));
         System.out.println(Math.floor(Math.random() * 10));
         System.out.println(Math.floor(Math.random() * 10));
     }
 }

このように記述します。同じ処理の記述を3つ書くことで3つのランダムな数字が表示されています。このプログラムはランダムなナンバーを出力するので、何度も実行すると数値が変化するのがわかります。しかし、実行してみてわかる通り、このプログラムの出力結果は、7.0や3.0といった形で少数以下にゼロが表示されています。Math.floorを使用した影響でこうなっています。出力する値を整数にすると良いでしょう。
ここでは以下のように記述します。


System.out.println((int)Math.floor(Math.random() * 10));

追加したのは(int)の部分です。(int)は、値の型をint型にするという命令を出しています。int型とは、整数の型です。ここで小数点以下が付いた数値を整数に変換しています。値の型については後の章で解説します。今は(int)で整数に変換していると考えてください。

2.ソースコードの改良

今は数字が表示されていますが、ルーレットで出た数字を横に並べたくありませんか。

System.out.printlnと記述していた部分をSystem.out.printと記述してみてください。

すると、ランダムな数字が横並びに表示されます。
実はprintlnのlnの部分というのは改行を表していたのです。この改行の命令を取り除くことで改行されず、次の数字が横に表示されているのです。
また、文字列を使って表示画面に装飾を施してみましょう。
例えば「<3><8><9>」といった表示にしてみましょう。
出力処理の1行は以下のようになります。


System.out.print("<" + (int)Math.floor(Math.random()) * 10) + ">");

文字列は「"」で囲む必要があります。「Hello world」を出力したときも囲っていましたね。今回は1つの文字列を出力するだけでなく、つなげる必要があります。文字列の結合には「+」を使用しています。

ナンバーの表示に機能を付け加えてみましょう。1番目と2番めに出力されたナンバーが同じか判別し、同じ時は「おしい!」と表示させます。

以下の2通りの処理があります。

  • 1番目の数字と2番目の数字が同じならば「おしい!」と表示する
  • そうでなければ何も表示しない。

表示画面は条件を満たしたとき、以下のようになります。
<2><2><6>おしい!
このように表示させます。ここでは「~なら」といった条件の判定が必要になります。

第4項 実習4

1.if文の書き方

条件を判定するには、if文を使います。if文を使用することで、「もし〇〇なら△△する」といった処理を行うことができます。if文は以下のように記述し使用します。


 if(判定条件) {
     処理
 }

判定条件が正しかった場合のみカッコの中の処理が行われます。正しくない場合にはカッコの中の処理は行われません。
判定条件には、式を書きます。2以下なら、という場合は


 if(◯<=2) {
     処理
 }

式には「>」や「<」などの記号を使用します。ただし、値が同じである、つまりイコールを使用する場合は「==」のように2つ記述します。また、例文にもあるとおり、右辺以下という判定には「<=」を使用します。以上であれば「>=」です。また、3以上で6未満の数字など、条件が複数になる場合は、「&&」で複数の式を条件にすることができます。3未満の数字または6以上の数字など、複数の条件の何れかがあっているという場合は「||」を使い条件式を記述します。

2.if~else文

今回のプログラムの判定条件には「そうでないなら~」といったものがあります。せっかくですので、「おしい!」と表示されないときは「はずれ」と表示されるようにしてみましょう。

  • 1番目の数字と2番目の数字が同じならば「おしい!」と表示
  • そうでなければ「はずれ」と表示

この「そうでないなら~」という処理を行いたい場合、ifの後にelseというものを使います。


 if(判定条件) {
     処理
 }else {
     処理
 }
 

上記のように記述します。ifの判定条件が正しい場合はifのカッコ内の処理を、正しくない場合はelseのカッコ内の処理を行います。

しかし、ここで1つ問題があります。ランダムな数字を取得する処理を書くと、以前とは違うナンバーが出る可能性が高いです。同じ方法でランダムに取得した数字をどうやって比べたら良いのでしょうか。これは「変数」というものを使って解決することができます。

3.変数

プログラムには「変数」という機能があります。変数とは値を保存しておける箱のようなものとよく表現されます。今回のプログラムでは、ナンバーの表示に使った値を判定条件の中でも使いたいのですが、このようなときに変数が活躍します。
変数の中にランダムに取得した値を入れ、あとからその変数を呼び出すことで同じ値を再利用することができます。今回は3つの数字を取得しているので3つの変数に値を入れます。

変数は、変数の定義、値のセット、呼び出すといった使い方をします。変数については後の章で詳しく解説しますので、ここでは簡単に使用してみることにしましょう。

変数の定義は以下の構文で行います。


変数の型 変数名;

変数の型とは聞き慣れないかもしれません。ここでは「long」と記述し、long型の変数としておきます。変数の名前は自由につけることができます。ここでは「a」「b」「c」としておきます。変数の型といわれてもピンと来ないかもしれません。今はあまり考えず、後の章で詳しく学習しましょう。


long a;

これでlong型のaという変数が作成されることになります。
次は変数に値をセットします。セットする値は(int)Math.floor(Math.random() * 10)を使います。


a = (int)Math.floor(Math.random() * 10)

上記のように記述し、変数aにランダムな数値がセットされます。あとはこの文を変数b、変数cでも行い、ランダムな数字を3つ確保します。

第5項 実践

ここからは実践です。これまで学習したことを踏まえ、実際にプログラムを作成しましょう。

1.表示の追加

ナンバーの表示に加え、

  • 1番目の数字と2番目の数字が同じならば「おしい!」と表示
  • そうでなければ「はずれ」と表示

上記を付け加えてください。出力画面は以下のようになります。

<3><8><9>はずれ

このような形で出力するようにしましょう。今回はSample1_03クラスを作成します。処理の内容をじっくり考え、プログラムを作成してみてください。解答例は事項に掲載します。

2.ソースコード


 package jp.CRI_school.java.chapter1;

 public class Sample1_03 {

     public static void main(String[] args) {
         long a;
         long b;
         long c;
         
         a = (int)Math.floor(Math.random() * 20);
         b = (int)Math.floor(Math.random() * 20);
         c = (int)Math.floor(Math.random() * 20);

         System.out.print(“<” + a + “>”);
         System.out.print(“<” + b + “>”);
         System.out.print(“<” + c + “>”);

         if(a == b) {
             System.out.println("おしい!");
         }else {
             System.out.println("はずれ");
         }
     }
 }

さて、このプログラムを何度か実行してみるとわかるかもしれませんが、いくつか欠点があります。実は今のプログラムでは3つの数字が見事に揃ったとき、「おしい!」と表示されてしまうのです。これでは少しおかしいですね。また、今の条件では1番目の数字と3番目の数字や2番目の数字と3番目の数字が揃ったとき、何も表示されません。&&を使って条件を複数にすることで3つ揃ったとき「あたり!」と表示するように改良してみましょう。さらに「||」を使って、「おしい!」と表示されるための条件を増やしてみましょう。

ルーレットの結果で以下のように出力されます。

  • 1番目と2番目と3番目が揃ったとき「あたり!」と表示
  • 1番目と2番目または2番目と3番目または1番目と3番目が揃ったとき「おしい!」と表示
  • 1番目と2番目と3番目がそれぞれ異なっている場合、「はずれ」と表示

ここでは条件分けをする順番が重要になってきます。3つの数字が揃っているとき、「あたり!」と表示する条件に当てはまりますが、同時に「おしい!」と表示する条件にも当てはまっています。if文を2つ書けばよいのでしょうか。しかし、それでは2つのメッセージが表示されてしまいます。ここでは順番に「あたり!」でなければ「おしい!」でなければ「はずれ」と表示するように処理したいところです。このような「そうでないなら~〇〇、それでもないなら~」といった具合に条件判定の後さらに条件判定をする必要があります。その場合if else if~文を使うと処理することができます。

3.if else if~文

if else if~文は構文は以下のようになります。


 if(判定条件A) {
     処理A
 }else if(判定条件B) {
     処理B
 }else {
     処理C
 }

判定条件Aを満たさないとき判定条件B、それも満たさないときのみ処理Cが行われます。
それでは、プログラムを改良していきましょう。

4.ソースコード改良

プログラム中のif文を以下のように書き換えてください。
3つの数字が揃うという条件は a == b かつ b == cとすることができます。
また、「おしい!」と表示する条件は、a == b または b == c または a == cとすることができます。


 if(a == b && b == c) {
     System.out.println(“あたり!”);
 }else if (a == b || b == c || a == c){
     System.out.println(“おしい!”);
 }else {
     System.out.println(“はずれ”);
 }

いかがでしたでしょうか。これまで学習したことの組み合わせになっていますね。
本章で簡単に説明を終えたものは、後の章で詳しく解説がありますので後から学習して行きましょう。

コピーしました
RSS https://cbc-study.com/rss.xml
質問などあればSlackで