Javaを基礎から学ぶその２　条件分岐や繰り返しの処理

この記事は[JavaとPythonを基礎から学びたい私のための Advent Calendar 2024](https://qiita.com/advent-calendar/2024/aruhitonocalendar)の2日目の記事です
C#がちょっとできるJava初心者の記事です。型の種類についての確認や、条件分岐と繰り返しについて学びます。

---
# 型の種類
intとかStringとかよく使っています。単に型と呼ばれることもあれば、「データ型」と呼ばれることもあるそうです。
調べた結果、大量にあったので載せておきます
〇文字系
・char
・String
〇整数
・short
・byte
・int
・long
〇小数
・float
・double
〇条件
・boolean
こんな感じのようです。C#では条件のbooleanをboolとしてあらわしていたり整数がもっと多かったりする(ulongとか)のですが、Javaではこれだけ抑えておけばいいようです。楽です。
私があまり使ったことのなかったchar型とshort型の特徴について記しておきます。
### char型
char型には一文字しか入れられないそうです。まずは一文字入れて使ってみます。
```
public class TEST{
 public static void main(String[] args){
    char A="A";
    System.out.println(A);
 }
}
```
これで実行するとエラーが出ました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2961125/cedf2468-183e-2fdc-90bd-118e9f036003.png)
なんと、String型では文字列を二重引用符(")で囲むのに対して、char型ではただの引用符(')で囲まないといけないそうです。ちなみに、String型をただの引用符で囲んでもエラーが出てしまいました。これからもうっかり間違えそう。
正しく動いた方を下に載せておきます。
```
public class TEST{
 public static void main(String[] args){
	char A='A';

	System.out.println(A);

 }
}
```
これで動きます。ここで
#### もう一つの疑問
が浮かびました。char型にうっかり2文字以上入れた場合です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2961125/2273ad62-b68e-95c7-e898-290319da15e9.png)
こんな感じで、2文字入れると
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2961125/974587b9-2b3e-6af7-6aa0-aa88acd311a3.png)
3つもエラーが出てしまいました。
こんな感じで、char型はちょっと使いにくいです。が、きっといつか活躍してくれると思います。
### short型
見るからに短そうな名前の型ですが、-32768～32767の65536個も入るそうです。調べた限りだとbyte型が-128～127までの256しか入らないそうなので2番目に多いかと思われます。
使いかたはint型とほとんど同じでした。
```
public class TEST{
 public static void main(String[] args){
	short A=12020;
	System.out.println(A); 
 }
}
```
これでちゃんとAの中身の12020が出力されます。ところで、数字が0から始まっていた場合、挙動がおかしくなってしまいました。
```
short A=012020;
```
と、数字の左から1番目を0とすると5136とかいう謎の数字を返してきました。int型でも同じ数を返してきます。何故か8進数になっているようです。ちなみに0で埋めたいときは
```
int A=12020;
	 System.out.println(String.format("%06d", A)); 
```
これで012020と出力されるようです。
# 条件分岐
条件の結果によって処理を変えるやつです。ifとかswitchとか。Javaの処理ではC#と何か違う点があるか調べます。
## if文
動いたものを載せます。
例)Aが0の時に"A"という文字を出力
```
public class Hello{
 public static void main(String[] args){
  int A=0;
  if(A==0)
  {
  System.out.println("0");
  }
 }
}
```
Javaでもこんな感じで動きました。3行目のint A=0;の０の部分を変えれば、条件式は成り立たなくなります。C#と何ら変わりません。
### elseの処理
条件式に当てはまらないときの処理はC#同様elseを使って処理をすればいいようです。
```
if(A==0)
  {
  System.out.println("0");
  }else
  {
  System.out.println("not 0");
  }
```
Aの値を変えれば、not 0が出力されます。やっぱり変わらん。
### else if
便利なことに、一つ目の条件式に当てはまらない場合に二つ目の条件式を設定できるようです。
上のelseのように使うことでいけます。
```
if(A==0)
  {
  System.out.println("0");
  }else if(A==1)
  {
  System.out.println("1");
  }

```
Aが1の時"1"が出力されます。if系はC#と比べて特に違いないみたいです。ちなみにelseやelse ifはifの真下に置かないとエラーが出ます。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2961125/151b927f-433a-c02b-d94a-355d32ab47d3.png)
こんな感じです。ifとelse系との間に余計なものを入れないように気を付けます。
### switch
複数の条件分岐を一度に書くことができる便利な奴です。私もC#でよく使っています。Javaにもちゃんと存在しています。
例えばAの中身が0~2のどれかを知るためのコードがこんな感じです。
```
 switch(A){
    case 0:
     System.out.println("Aは0");
    break;
    case 1:
     System.out.println("Aは1");
    break;
    case 2:
     System.out.println("Aは2");
    break;
    }
```
caseとbreakは必ずしも同数でなければならないといったことはないようです。例えばcase 0に対応するbreakを消すと、A=0の時にcase 0だけでなく、breakがないことでその下のcase 1の中身も一緒に実行されました。
# 繰り返し
繰り返しにもforとかwhileとか、いろいろあります。実際に調べてみた結果、そこまでC#と違うようなものは見当たりませんでした。
### for文
```
for(int i=0;i<20;i++){
 	System.out.println(i);
	}
```
iが0から20になるまでの間、iの中身を出すだけの文です。iはfor文の{}の中でのみ使用できます。
### 拡張for文
```
int[] A={0,2,3,5,8};
	for(int B:A){
	System.out.println(B);
	}

```
配列については明日勉強しようと思っているので詳しく確認しません。
Aという配列の中身をBにしてひとつづつ出力してるっぽいです。
### while文
自分はあまり使ってないけど、結構便利です。
```
int i=1;
	while(i<4){
	System.out.println(i);
	i++;
	
	}
```
for文と違うのは、intをwhile文の外から変更できる点です。使い勝手がいいです。
###　do while文
```
int i=10;
	do
	{System.out.println(i);
	i--;
	}while(i>0);
```
初めて使いました。条件式が最後に書かれており、whileの後に;が付いているのが特徴的です。ちなみに上を実行すると10から1までひとつづつ出してくれます。


## まとめ
繰り返しも条件分岐も、ちゃんとJavaに存在していた。char型は使える場が限られている。
参考文献

https://www.sejuku.net/blog/48345

https://magazine.techacademy.jp/magazine/19023

https://www.javadrive.jp/start/for/

https://www.javadrive.jp/start/for/index7.html