授業で習ったJavaの復習をつらつらと part2

# はじめに

[part1](https://qiita.com/arch-yzk/items/a8b49c905779cf49b708)を読んでから、もしくはJavaでif文が取り敢えずわかったら読んでね。あとファイルを作るときにはファイル名とクラス名はそのままにしないでね。使う関数の名前のままだとエラー吐くよ

今回はpart1を前提に、for文や文字入力等、オブジェクト指向ではない部分を取り扱う予定。

# ループ文

Javaにはforとwhileがある。例文を使い分けができればなお良い。

まずはfor文から。

```java/for.java
public class for
{
    public static void main(String[] args)
    {
        System.out.println("terminalに1~5を出力");
        
        //for文で使えるint型のiを定義、制御に使っている
        for(int i = 1; i <= 5; i++) //i++ でループする時にiに1を足して再実行できる
        {
            System.out.println(i);
        }
    }
}
```

for文での注意点は以下。

- ループする回数を自分で理解して使うこと
- 区切り文字が「,」ではなく「;」

区切り文字は構文なので仕方ないと思う。
　「自分で理解して使う」という点だが、例えばfor文の中のint iの初期値が0だったらどうなるだろう。今回の場合だと、「1から5まで」の整数を出力したいので、初期値を0にしてしまうとターミナルに0も出力してしまう。また、「i <= 5」の部分の条件を「i < 5」にしてしまうと5が出力されない。
　このようにfor文は便利だが、自分が誤った範囲を指定してしまうと予期せぬエラーを起こしてしまうので注意。
　注意点には書いていないが、変数には**スコープ**という概念がある。これは**「{}」の中(ブロックと言う)の中で定義した変数はそのブロックの中でしか使えない**、というものだ。例えば今回のプログラムでfor文の中で定義した「int i」は、for文の下に「System.out.println(i)」などとfor文の外で使おうとするとエラーを起こす。

続いてwhile文。同じく繰り返しなのだが、判定が若干違うので注意。

```java/while.java
public class while
{
    public static void main(String[] args)
    {
        System.out.println("Terminalに1~5を出力");

        int i = 1; //while文で使う整数を定義
        while(i <= 5) //この条件の間はずっと実行する
        {
            System.out.println(i);
            i++; //ないと無限ループするよ
        }
    }
}
```

while文での注意点は以下である。

- 制御する変数や値の代入を逐一書く
- for文とは判定が逆

変数を条件定義の時点で入れられるfor文と違って、while文は先に書いておく。(できないと思うけどそのへんは知らん。)

　**for文は「〜の条件になるまで実行する」**に対して、**while文は「〜の間ずっと実行する」**という制約条件なので、for文とは使用用途が少し違う。具体例としては、自動販売機でジュースを買わせるプログラムを書くときにwhile文だったら所持金がなくなるまで買わせるプログラムを簡単にかける。(鬼畜)

### ここのまとめ

- for文の書き方、動き方
- 変数のスコープ
- while文とfor文の違い

---

# 文字入力

Javaで文字を入力して(例えば整数を計算させる)変数に入れる方法が2つあります。
まずは1つ目から。

```java/Scanner.java
import java.util.Scanner; //Scannerを使うために必要

public class Scanner
{
    public static void main(String[] args)
    {
        Scanner sc = new Scanner(System.in); //名前が「sc」のScannerを用意
        System.out.println("なんか入力して");
        String str = sc.next(); //取り敢えず文字列型strに代入
        /*int aaaa = sc.nextInt(); //intの場合はこの記述を使う*/
        System.out.println("入力したものは" + str);

        sc.close(); //scを使ったあとは終了するコマンドを打とう
    }
}
```

ここで出てきた関数は「Scanner」で、入力した文字列をStringに代入している。整数型や実数型にも変換できる。
　一番最初に「import」した部分は、関数を呼び出すために必ず書かなければ行けない部分で、これがないとScannerは使えない。関数は「自分で作っていないから」である。一部はJavaの基本構文としてimportしなくても用意されているのでコーディングできる。

もう1つ標準入力する方法があるので、こちらも記載しておく。

```java/BufferedReader1.java
import java.io.*; //java.ioの中の関数を全部読み込む(2つ以上書くのがめんどくさいだけ)

public class BufferedReader
{
    public static void main(String[] args)throws IOException //例外を投げる処理
    {
        BufferedReader br = /* BufferedReader型の「br」を宣言 */
        new BufferedReader(new InputStreamReader(System.in)); //1行でもいいけど見づらいので改行
        String str = br.readLine(); //キーボード入力をString型でstrに代入
        /*int aaaa = Integer.parseInt(str); //intに変換するときはこの文を挿入して使う */

        System.out.println(str); //Terminalに出力

        br.close(); //念の為記述
    }
}
```

Javaでは「Scanner」や「BufferedReader」等が使え、書くのはめんどくさいがBufferedReaderのほうが処理が早いです。
 ScannerにしろBufferedReaderにしろ、使うときは最初にimport文を書いて使える状態にしないとコンパイルエラーを起こすので注意。あと「sc.close();」のように**使ったら終わる処理を書く**こと。現実でのお片付けと一緒。
例外は後日記述します。とりあえずここでは「こんなもん」で留めておいて。
両方とも一部分しか書いていないので公式ドキュメントを参照するといいよ。全部載ってる

### ここでのまとめ

- Scanner、BufferedReaderの使い方
- それぞれの終わる手順


## part3でクラスやオブジェクト指向を書きます