Rynのページ(商業高校情報教育研究室)
物凄く乱暴なJavaに関する用語(基本文法)
詳しくは公式マニュアルをお読みください。
Javaって、こんな風にも書ける、とか、こうとも言う、とか、色々有るので、
以下は雰囲気だけのざっくりとした説明です。
作成中です。ミス有ったら後免。
算術演算子
加減乗除の演算子
加減乗除の演算子は、それぞれ、+、-、*、/、で、COBOLやEXCELなどとは変わらない。
a % b
% は、左辺を右辺で割った余りを求める演算子。
a%bは、aをbで割った余り。
べき乗
Javaには、べき乗の演算子は無い。
べき乗をしたい時は、あらかじめ用意されているMathクラスのメソッドのMath.pow(x,y)を使用する。
例えば、2の3乗を求めたい時は、 Math.pow(2,3) と書く。
このメソッドは、x、y、及び戻り値はDouble型なので一寸注意が必要。
ちなみに、MathはMathematics(マセマティクス=数学の、マス)。
また、 ^ は,Javaでは、排他的論理和をあらわす論理演算子で、文法エラーにならないので要注意。
代入演算子
a=b
= は、左辺に右辺を代入する演算子。COBOLやEXCELと同じです。
a += b
+= は、左辺に右辺を加算する演算子。
a+=b は、a=a+b と同じ。
a+=b の他に、a-=b、a*=b、a/=b、a%=b、も出来る。
キャスト
変数の型の変換は、変換先の型が扱える数の範囲が変換元と同等以上の型へのみ、暗黙に行われる。
long型の変数=int型の変数
範囲が減少する型への変換は、エラーとなる。
どうしてもやりたい時は、カッコにデータ型を明示して書く。キャストという。
int型の変数=(int)long型の変数
実数型から整数型へ変換した場合は、小数点以下は切り捨てられる。
整数型から実数型へ変換した場合は、小数点以下はゼロになる。
計算結果は、「られる数」のデータ型に依存する。
例えば、
int型の変数÷int型の変数
の計算結果はint型であり、小数点以下は切り捨てられている。よって、
float型の変数=int型の変数÷int型の変数
の計算結果は、整数で求められた結果を実数型の変数に代入しているだけなので、
有効な部分は整数だけになる。
計算結果を小数点以下の値まで求めたい時は、
float型の変数=(float)int型の変数÷int型の変数
の様に、カッコに扱いたいデータ型を明示して書く。
ちなみに、
float型の変数=(float)(int型の変数÷int型の変数)
と書くと、整数で求められた結果を実数型に変換しているだけなので、
最初の例と同じ事である。
なお、boolean型は、どの型へも、暗黙の型変換やキャストは出来ない。
比較演算子
a == b
== は、「等しい」をあらわす演算子。
a==b は、「aとbは等しい」。
a != b
!= は、「等しくない」をあらわす演算子。
a!=b は、「aとbは等しくない」。
「以上」「以下」「を超える」「未満」については、COBOLやExcelと同じ。
論理演算子→短絡演算子
大きな括りで言うJavaの論理演算子には、
「&」「&&」(論理積)
「|」「||」(論理和)
「^」(排他的論理和)
「!」(否定)
が有る。
この内、「&」「|」「^」「!」を、ビット演算子と言ったりもする。
この4つは、左辺の条件と右辺の条件の両方を必ず評価(=処理、判断)して、結果を返している。
「&&」「||」は、左辺の条件の評価だけで結果が判る
(論理積で左辺の条件が成り立たない、論理和で左辺の条件が成り立つ)
場合は右辺の条件を評価せず結果を返す為、処理速度が速くなるが、
反面、右辺の処理、評価をしないことによる副作用
(インクリメント、デクリメントが実行されない、など)も有ったりするので、要注意。
この様な論理演算子を短絡演算子と言い、対して、前述の4つを非短絡演算子と言う区別の仕方も有る。
短絡演算子 && と 非短絡演算子 & の違いの例。
以下の例は無理矢理な動作確認の為のものだが、
例えば、配列の添字をインクリメントやデクリメントで変化させようとする場合などは、
ゴチャゴチャになる場合が有るので要注意。
反対に、この性質をワザと利用したプログラムも有る。
& の例。左辺も右辺も必ず評価されるため、
左辺も右辺も必ずインクリメントされる。
// 3でも7でも割り切れる数。&の例(正しい)
public class Ronri_1 {
public static void main(String[] args) {
int a = 0, b = 0;
while( a < 100){
if((++a % 3 == 0) & (++b % 7 == 0))
System.out.println("a=" + a + " b=" + b);
}
}
}
&& の例。左辺が成り立った時のみ右辺が評価されるため、
左辺が成り立たなかった分だけ、右辺のインクリメントの回数が少ない。
// 3でも7でも割り切れる数。&&の例(正しくない)
public class Ronri_2 {
public static void main(String[] args) {
int a = 0, b = 0;
while( a < 100){
if((++a % 3 == 0) && (++b % 7 == 0))
System.out.println("a=" + a + " b=" + b);
}
}
}
つまり、&& は、以下と同じ。
// 3でも7でも割り切れる数。(正しくない)
public class Ronri_3 {
public static void main(String[] args) {
int a = 0, b = 0;
while( a < 100){
if(++a % 3 == 0){
if( ++b % 7 == 0)
System.out.println(" a=" + a + " b=" + b);
}
}
}
}
短絡演算子 || と 非短絡演算子 | の違いの例。
以下の例は無理矢理な動作確認の為のものだが、
例えば、配列の添字をインクリメントやデクリメントで変化させようとする場合などは、
ゴチャゴチャになる場合が有るので要注意。
反対に、この性質をワザと利用したプログラムも有る。
| の例。左辺も右辺も必ず評価されるため、
左辺も右辺も必ずインクリメントされる。
// 3か7のどちらかで割り切れる数。|の例(正しい)
public class Ronri_4 {
public static void main(String[] args) {
int a = 0, b = 0;
while( a < 100){
if((++a % 3 == 0) | (++b % 7 == 0))
System.out.println("a=" + a + " b=" + b);
}
}
}
|| の例。左辺が成り立った時のみ右辺が評価されるため、
左辺が成り立たった分だけ、右辺のインクリメントの回数が少ない。
// 3か7のどちらかで割り切れる数。||の例(正しくない)
public class Ronri_5 {
public static void main(String[] args) {
int a = 0, b = 0;
while( a < 100){
if((++a % 3 == 0) || (++b % 7 == 0))
System.out.println("a=" + a + " b=" + b);
}
}
}
つまり、|| は、以下と同じ。
// 3か7のどちらかで割り切れる数。(正しくない)
public class Ronri_6 {
public static void main(String[] args) {
int a = 0, b = 0;
while( a < 100){
if(++a % 3 == 0)
System.out.println(" a=" + a + " b=" + b);
else if(++b % 7 == 0)
System.out.println(" a=" + a + " b=" + b);
}
}
}