【Java】文字取得・boolean型用途（AOJ⑤不足しているカードの発見）

#文字列から指定位置の1文字を取得
* **charAtメソッド** 
* `文字列.charAt(指定位置);`


```java
public class Main {
    public static void main(String[] args){

    String str = "もふもふねこ";
    System.out.println(str.charAt(0)); //も
    System.out.println(str.charAt(3)); //ふ
    System.out.println(str.charAt(4)); //ね
    System.out.println(str.charAt(5)); //こ
  }
}
```

#boolean型の用途
* boolean型は、true(はい)またはfalse(いいえ)の判定結果を入れるために利用できる
* 数値や文字列の比較結果を表す
* if文で分岐の方向を表す
* for文やwhile文でループを続行するか決定する

```java
//数値比較
public class Main {
    public static void main(String[] args){
    System.out.println("1 = 1 ? : " + (1 == 1)); //1 = 1 ? : true 
    System.out.println("1 = 2 ? : " + (1 == 2)); //1 = 2 ? : false
    }
}
```

##if文の条件分岐で使う方法
```java
//if文で分岐の方向を表す
int a = 0;
int b = 1;
if(a == b) {
  System.out.println("trueの場合に実行");
}
else {
  System.out.println("falseの場合に実行");
}
```

```java
public class Main {
    public static void main(String[] args){
        // boolean型変数を宣言
        boolean isEighteen = false; 
        int Age = 18; 
        isEighteen = (Age >= 18); 
        System.out.println(isEighteen); //true
        if (isEighteen) { // true 
            System.out.println("18歳以上"); //18歳以上
        } else {
            System.out.println("18歳未満");
        }
    }
}
```


##Whileで使う方法
```java
//while文でループを続行するか決定
import java.util.Scanner;
public class Main {
    public static void main(String[] args){
    int i = 0;
    while(i < 10) {
        System.out.print(i + " ");
        i += 1;
    }
  }
}
```

#Boolean
* Booleanとは、boolean型ラッパークラスのことで、boolean型を便利に使うためのメソッドを持ちます。
* Booleanクラス 参照型 クラスまたはインスタンスを参照する
* Booleanはクラスなのでnull（何も定義されていない参照）
* **toStringメソッド**
    * boolean型の値を文字列で返し、trueが入っている時は“true”、falseは“false”が返る

```java
public class Main {
    public static void main(String[] args){
        Boolean bool = Boolean.valueOf(true);
        System.out.println(bool); //true
        bool = null;
        System.out.println(bool); //null
  }
}
```

```java
public class Main {
    public static void main(String[] args){
        Boolean bool = Boolean.valueOf(true);
        System.out.println(bool.toString()); //true
    }
}
```

##不足しているカードの発見
>太郎が花子と一緒にトランプ遊びをしようとしたところ、52枚あるはずのカードが n 枚のカードしか手元にありません。これらの n 枚のカードを入力として、足りないカードを出力するプログラムを作成して下さい。
太郎が最初に持っていたトランプはジョーカーを除く52枚のカードです。
52枚のカードは、スペード、ハート、クラブ、ダイヤの４つの絵柄に分かれており、各絵柄には13のランクがあります。
* Input
最初の行に太郎が持っているカードの枚数 n (n ≤ 52)が与えられます。
続いて n 組のカードがそれぞれ１行に与えられます。各組は１つの空白で区切られた文字と整数です。文字はカードの絵柄を表し、スペードが'S'、ハートが'H'、クラブが'C'、ダイヤが'D'で表されています。整数はそのカードのランク(1 〜 13)を表しています。
* Output
足りないカードをそれぞれ1行に出力して下さい。各カードは入力と同様に１つの空白で区切られた文字と整数です。出力するカードの順番は以下のとおりとします：
* 絵柄がスペード、ハート、クラブ、ダイヤの順番で優先的に出力する。
* 絵柄が同じ場合は、ランクが小さい順に出力する。



```java
import java.util.*;
class Main {

	static char[] symbol = new char[] {'S','H','C','D'};
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		boolean[][] cards = new boolean[4][13];
		for(int i = 0; i < n; i++) {
			char k = sc.next().charAt(0);
			int r = sc.nextInt();
                         //配列は0始まりであることに注意！
			if(k == 'S') {
				cards[0][r-1] = true;
			}
			if(k == 'H') {
				cards[1][r-1] = true;
			}
			if(k == 'C') {
				cards[2][r-1] = true;
			}
			if(k == 'D') {
				cards[3][r-1] = true;
			}
		}
		for(int i = 0 ; i< 4; i++) {
			for(int j = 0; j < 13; j++) {
				if(!cards[i][j]) {
					System.out.println( symbol[i] + " " + (j+1));
				}
			}
		}
	}
}
```