第2回 Javaの基礎と条件分岐

    
1 JavaとProcessing
 
・Processingでのプログラミング言語仕様は Java がベースになっています
 - 変数の扱い、型、演算子、制御処理( if文 、for文 など)、クラス、・・・ はほぼ同じ
 - Processingは Java に較べて
    >グラフィックスや音声の利用が簡単
    >アニメーションなど動きのあるプログラムを作りやすい
    >マウス、キーボードの処理が簡単
  などの特徴がある
 - 実行方法はJavaと少し異なる

・ コンソールへの出力方法の違い
 - Javaの場合
  System.out.println("good morning");   //<-- 改行あり
  System.out.print("Hello");   //<-- 改行なし
      
 - Processingの場合
  Javaの System.out.println() および System.out.print() も使用可能だが、System.out を省略して
  println("good morning");
  print("Hello");
    と記述してもOK

 
<注意>
・ Processingのエディタで、日本語が文字化けする人
  [ファイル] --> [設定] を開き、下記の部分を変更してください。
  
 
 下の図で、上図は文字化け、下図は日本語が正しく表示されているものです
  
  
  
  
 
2 Java(およびProcessing)の基礎
  
・以下は、参考書(やさしいJava)の内容に沿って基礎部分を説明しています
 - 大事なところを抜粋して、掲載している
 - 「2.3 文字と数値」の 2.3 は、Lesson2 2.3節 の内容(p.29から)を示している
  ページ数は、第6版と第7版で少しずれているかも、でも内容は同じ
 - Webの資料は、参考書の説明を簡潔にまとめたもの
 
 9.9 ***と###
  の書式の部分は、教科書からの解説
 同じ数値の節を読むこと
 
  
3 数値、変数、演算子など
     
 2.3 文字と数値
 
・リテラルとは
 - 一定の「値」を表すために用いられる、Javaの単語のようなもの
  文字リテラル、文字列リテラル、数値のリテラル

・ 文字リテラル
 - シングルクォーテーションで囲む  'A'、'a'、'あ'

・ エスケープシーケンス

 - '\'を組み合わせて表現する特殊な文字

・ 文字コード
 - JavaではUnicodeを用いる

・ 文字列リテラル
 - ダブルクォーテーションで囲む(※Pythonではシングルクォーテーションでも可)
   "Hello"、"Goodbye""こんにちは"

・ 数値リテラル
 - 整数型
 - 浮動小数点型
   
 3.3 型
 
・型のしくみを知る
 - Javaの変数には多くの「型(type)」がある
 - Pythonの変数の型は int型、 float型、 str型、 bool型 など

Javaの変数の型> (※青色の型はよく使う)
型の名前
内容
boolean
論理型、turefalse の値
char 2バイト文字
byte 1バイトの整数(-128 ~ 127)
short 2バイトの整数(-32,768 ~ 32,767)
int 4バイトの整数(-214,783,648 ~ 214,783,647)
long 8バイトの整数(-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807)
float 単精度浮動小数点(4バイト)
double 倍精度浮動小数点(8バイト)
     
   
 3.4 変数の宣言
 
・変数を宣言する
 - 使用する変数は宣言する必要がある
 - Pythonは変数を宣言する必要はない
 
  int i;
  double val;

  i = 5;
  val = 2.56;

  a = 10; // <-- これより前で変数aは宣言されてないので、エラーとなる 

      
・値の代入についての注意
 - 基本的に、宣言した型と異なる型の値を代入しない方がよい
  int num;
  num = 3.14;
// numは整数型(int)、3.14は実数型(double)なのでダメ
 
・変数の宣言位置についての注意
  - 変数を宣言する場所に気をつけること(変数のスコープ)
  - 下図で、左図はOKで、右図はNG。違いを確認しよう
   // を記述すると、それより右側はコメントとなる
  
  
     
 4.2 演算子の種類(教科書 p.72)
 
・いろいろな演算子
 - 四則演算など基本的な演算子は、Pythonと同じ

・インクリメント・デクリメント演算子
 - 変数の値を1増やす1減らす演算子
 - Pythonにはない
 
 int i = 0;
 i++;  // i+=1;やi=i+1;と同じ

 int j = 1;
 j--:  // j-=1;やj=j-1;と同じ
 
・ インクリメント・デクリメントの前置と後置
 - 「b = a++;」と「b = ++a;」は意味がことなる
    「b = a++;」 b へ代入してから a+1
    「b = ++a;」 a+1 してから b へ代入

・代入演算子
 - 代入演算子は、Pythonとほぼ同じ
       
 4.4 型変換
 
・大きなサイズ、小さなサイズの型に代入する
 - 異なる型へ値を代入する場合、明示的にキャスト(型変換)するのが望ましい
 - 明示的なキャストのない代入は、自動で型変換をやってくれる
 - 左辺の変数の型に合わせてキャストする
 
 int i = 2;
 double val;
 // int型 --> double型
 
val = (double)i; // valには 2.00 が代入される

 double d = 1.53;
 int num;

 // double型 --> int型
 
num = (int)d; // numには 1 が代入される(小数点以下は切り捨てられるので注意)

 
・異なる型どうしで演算する
 - 大きなサイズの型に自動的に変換して(されて)から演算する(※サイズが大きい=有効桁数が多い)
 - 特に、整数÷整数 の割り算に注意する(整数÷整数の計算結果は整数になるので、小数点が切り捨てられる)
 double a = 1/2;  // a は 0.0 となる。 0.5 にはならないので注意
  // 以下は全て 0.5  となる
 double b = 1/2.0; 
 double c = 1.0/2; 
 double d = (double)1/2; 
 double e = 1/(double)2; 
 double f = (double)1/(double)2; 
 
Python整数(int型)同士の割り算
   Python2 まで (int)/(int) = (int)  
   Python3 から (int)/(int) = (float) <--型が変化する  
   となるので、注意
   Python2 3/2 = 1  <--1.5の小数点以下が切り捨てられる
   Python3 3/2 = 1.5
 Javaは、Python2 と同様の仕様となっている
    
   
4 条件分岐
   
 5.1 関係演算子と条件
 
・条件のしくみを知る
 - 真:true  偽:false

・ 関係演算子を使う
 - 条件の設定は関係演算子を使う
関係演算子
条件
==
等しい
!= 等しくない
> 左辺が大きい
>= 左辺が右辺以上
< 左辺が小さい
<= 左辺が右辺以下              
 
    
 5.2 if文
 
・if文のしくみを知る
・if文で複数の文を処理する
 - if文のしくみは Pythonとほぼ同じ、文法は少し異なる
 int x = 12;
 if( x>10 ) x += 1;

  
・if文で複数の文を処理する
 - 複数の命令を実行するときは、中カッコで囲む
  (※Pythonはインデントの有無で制御するが、Javaはインデントは関係ない)
 int y = 12;
 
if( y>=10 ){ // 実行文が複数の場合、中カッコで囲む
   y += 1;
   System.out.println(y);
 
}
   
     
 5.3 if~else文 
 
・if~else文のしくみを知る
 - 下記のように記述する
 int y = 12;
 if( y>=10 ){
   y += 1;
   System.out.println(y);
 
}else{
  
y -= 5;
   System.out.println(y);
 }
 
    
 5.4 複数の条件を判断する
 
・if~else if~elseのしくみを知る
 - しくみは Python とほぼ同じだが、書式が異なる
 - 下記のように記述する
 int y = 12;
 
if( y>=10 ){
   y += 1;
   System.out.println(y);
 
}else if( y>5 ){
   y -= 1;
 
}else if( y>2 ){
   y -= 2;
 
}else{
   y -= 3;
 
}
 
   
 5.5 switch文
 
・switch文のしくみを知る
 - Pythonswitch ありません
 - if~else if~else if~ が複数回つづくような場合に使用する
 - 整数値および1文字の、複数個の場合分けをするのに適している
 int t = 0; // 整数型
   :
   :
 switch( t )
 {
  case 6:
     System.out.println("朝ごはん");
     break;
  case 12:
     System.out.println("お昼ごはん");
     break;
  case 15:
     System.out.println("おやつ");
     break;
  case 18:
     System.out.println("晩ごはん");
     break;
  default: // caseでどれも当てはまらない場合に処理される
     System.out.println("晩ごはん");
     break;

 }
 
 - break;がないと、下へ処理が続けて行われる
 switch( t )
 {
  case 6:
     System.out.println("朝ごはん");
  case 12:
     System.out.println("お昼ごはん");
     break;
  case 15:
     System.out.println("おやつ");
  case 18:
     System.out.println("晩ごはん");
     break;
  default:
     System.out.println("ごはん無し");
     break;

 }
  - 上記の例では、t = 6 のとき
    朝ごはん
    お昼ごはん
  と表示される

 - 1文字で条件分けをする場合
 char ch; // 文字型
   :
   :
  switch( ch )
 {
  case 'e':
     System.out.println("編集します。");
     break;
  case 's':
     System.out.println("Saveしました。");
     break;
  case 'r':
     System.out.println("Readしました。");
     break;
  case 'q':
     System.out.println("Quitします。");
     break;
  default:
     System.out.println("コマンドエラー");
     break;

 }
 
   
 5.6 論理演算子
 
・複雑な条件判断をする
 - ifの条件式を 論理積(and)論理和(or) で指定できる
 - 論理積は「&&」 、論理和は「||」 を使う
 int t;
   :
 if( 6<=t && t<=10 ){ // 6<=t かつ t<=10
   System.out.println("朝");
 }else if( 15<=t && t<18 ){ // 15<=t かつ t<18
   System.out.println("夕方");
 }
 
 - 論理和は「||」を使う
 int t;
   :
 
if( t<10 || t>=22 ){ // t<10 または t>=22
   System.out.println("営業終了");
 }else{
   System.out.println("営業中");
 }
  
 ※注意
  Javaでは、以下のような書き方はできないので注意する
 int t;
   :
 if( 6=<t<=10 ){ // t が6以上10以下のとき・・?
   ・・・・・・
 }else{
   ・・・・・・
 
}
  
    
  
 演習
   
  演習のページへ