見出し画像

iT-17-[Java☕︎勉強]

復習

・配列

データ型[] 配列名 = new データ型[要素数]

int[] score = new int[3];
score[0] = 80;
// scoreの0番目に、80を代入してください。 添字は、0からスタートすることに注意
データ型[] 配列名 = { 値1, 値2, ・・・・}

配列.length で、配列の要素数をGet
class Array {
  public static void main(String args[]) {
    int[] score = new int[3]
    score[0] = 80;
    score[1] = 100;
    score[2] = 70;

    String[] name = {"高木", "西山", "小梅"};

    System.out.println(name[0] + "さん:" + score[0] + "点");
    System.out.println(name[1] + "さん:" + score[1] + "点");
    System.out.println(name[2] + "さん:" + score[2] + "点");

    System.out.println("受験者数:" + score.length + "人です。");

// score.lengthをすることで、その要素の数(要素数)を利用することができる!!いいね。
  } 
}

多次元配列

class MultiArray{
  public static void main(String[] args){
    int[][] allScore = new int[2][3];
    allScore[0][0] = 80;
    allScore[0][1] = 100;
    allScore[0][2] = 75;
    allScore[1][0] = 85;
    allScore[1][1] = 95;
    allScore[1][2] = 80;
    
    // 多次元配列の初期化
    // int[][] allScore = { {10, 20, 30}, {40, 50, 60} };

    System.out.println(allScore[0][0] + "点");
    System.out.println(allScore[0][1] + "点");
    System.out.println(allScore[0][2] + "点");
    System.out.println(allScore[1][0] + "点");
    System.out.println(allScore[1][1] + "点");
    System.out.println(allScore[1][2] + "点");
    
    System.out.println("allScore.length:" + allScore.length);
    System.out.println("allScore[0].length:" + allScore[0].length);
  }
}

・演算子

//割り算
7 / 23
//あまりの数
7 % 21
//a = a + bと同じ。
a += b 
//aにbを加えて、aに再度代入する。
//a = a + 1;と同じ。
a ++;
a --;
class Operator {
  public static void main(String[] args){
    //コマンドラインから入力した文字列型を、int aとして宣言する
    int a = Integer.parseInt(args[0]);
    int b = Integer.parseInt(args[1]);

    System.out.println("a =" + a + "b =" + b );
    System.out.println("a + b =" + (a + b));
    System.out.println("a - b =" + (a - b));
    System.out.println("a / b =" + (a / b));
    System.out.println("a % b =" + (a % b));
    System.out.println("a >= 0 :" + (a >= 0);
    System.out.println("(a >= 0) && (b >= 0):" + ((a >= 0)&&(b >= 0));
    
  }
}

関係演算子 trueかfalse

論理演算子 &&, ||

・基本データの型変換

表現の幅が広い順〜狭い(自動で)
double, float, long, int, short, byte

大きい箱を小さな箱にむりやり入れる(代入する)ためには、
キャストというものが必要。

class FukuKau {
  public static void main(String[] args){
    
    //服のねだんを入力したらそれをargs[0]が引数となりpriceに代入してくれる。
    int price = Integer.parseInt(args[0]);
        
        //0.08は、浮動小数点数としてdoubleで宣言をし、値を代入しておく。
    double rate = 0.08;

        //amountという整数型を宣言しておく。
    int amount;

        /*amountに、税込金額の式を代入する。このとき、double型が64bit,int型が32bitなので、小きな
            箱に、大きな箱をむりやり入れることになる。そのため、てこ=キャストを使う必要がある。
            よって、(int)で変換後のデータ型を入れamountに代入している。  */
            
    amount = (int)(price * (1 + rate))
    System.out.println("税込金額は、" + amount + "円です。");
    
  }
}

・構造化プログラミング

①順次進行②分岐③繰り返し

・If文

if (条件式) {
  処理1
  } else {
   処理2
    }

・else if文

    if(条件式1){
       処理1;    
    } else if (条件式2)
       処理2;
    } else {    
       処理3;
    }

・swich文

    swich(式){
       
       case1:
       処理1
       break1;
     
       case2:
       処理2
       break2;
 
       case3:
       処理3
       break3;
    
    }

・式に入るのは、byte, short, int, char型である。
・式の値によって、処理の開始位置が決まる!!
・breakは何かというと、  { }を抜けます!という意味。

・while文

    while(条件式){
       処理
       case1:
       処理1
       break1;
     
       case2:
       処理2
       break2;
 
       case3:
       処理3
       break3;
    
    }

・前回間違えた問い

コマンドラインから入力した文字列を、そのまま表示できるプログラムをfor文を使って表示しなさい。

class Echo{
  public static void main(String[] args){
    //コマンドラインの入力文字列を表示(for文)

  }
}
>Java Echo aa bb cc

と入れたら、そのまま aa bb ccというものが出てくるはず。

参考コード

class Echo{
  public static void main(String[] args){
    //コマンドラインの入力文字列を表示(for文)
    for(int i = 0; i < args.length; i++) {
      System.out.println(args[i]);
    }
  }
}

・オブジェクト指向とは

class NonObject{
  public static void main(String[] args){
    //データの代入
    int[] score = {80, 100, 75};
    String[] name = {"菅原", "村山", "寺島"};

    //データの表示
    for(int i = 0; i < score.length; i++) {
      System.out.println(name[i] + "さん:" + score[i] + "点");
    }
  }
}

というコード。

1回作ったコードは、更新(変更)することがほとんどである。
例えば、この要素数の中で、生徒が一人増えたとした。
もしくは、教科の数を増やしたいと考える。

class NonObject{
  public static void main(String[] args){
    //データの代入
    int[] score1 = {80, 100, 75, 90};
    int[] score2 = {90, 80, 85, 70};

    String[] name = {"菅原", "村山", "寺島"};
    String[] name = {"数学", "英語"};

    //データの表示
    for(int i = 0; i < score.length; i++) {
      System.out.println(name[i] + "さん:" + score[i] + "点");
    }
  }
}

いちいち面倒だ。また、誰の、何の得点が何点かがわからない・・・。

人ごとの点数がもう少しまとめて、管理しやすくできないかを考える必要があると考える。

Javaには、実行用のクラスと、設計図クラスの二つがある。

クラス(設計図)
属性→何のデータを持っているのか。
(名前、教科、点数など)
操作→何の処理ができるか。
(点数を表示する)

→これによって、名前(菅原)英語(90)国語(80)
名前(佐藤)英語(50)国語(60)などというのをそのまま使える。

このような、クラスから作られる実体(モノ)を、object(オブジェクト)と呼ぶ。
このオブジェクトを中心にプログラムを作っていくことを、オブジェクト指向という。

・メリット

開発効率、保守性、メモリ効率、システム化など!!

クラス(設計図)
属性→何のデータを持っているのか。→  プログラムの世界では、変数
(名前、教科、点数など)
操作→何の処理ができるか。→  プログラムの世界では、メソッド
(点数を表示する)
これらの言い方がごっちゃにならないようにする。

・変数の定義

データ型 変数名;

class Student{
  //メンバ変数(属性)
  String name;
  int engScore;
  int mathScore;
以下はその下に続く

・メソッドの定義

戻り値の型 メソッド名(引数リスト){
(処理)
}

メソッドは、呼び出す側と、呼び出される側がある。

  //メソッド(操作)
  void display(){
    System.out.println(name + "さん");
    System.out.println("英語" + engScore + "点・数学" + mathScore + "点");
  }
  void setScore(int eng, int math){
    engScore = eng;
    mathScore = math;
  }  
  double getAvg(){
    double avg = (engScore + mathScore) / 2.0;
    return avg;
  }
}

引数・・呼び出し元から受け取る値のこと。
戻り値・・メソッドの処理の後に、呼び出しもとに返す値。returnで指定することができる。
また、何も返さない場合は、voidを記述する。

  void display(){
    System.out.println(name + "さん");
    System.out.println("英語" + engScore + "点・数学" + mathScore + "点");
  }

↑は、引数がないが、()は書いておくことに注意しておく。

  //データ型 変数名
  void setScore(int eng, int math){
    engScore = eng;
    mathScore = math;
  }  

↑は、引数がある。戻り値がない。

  double getAvg(){
    double avg = (engScore + mathScore) / 2.0;
    return avg;
  }
}

↑は、引数なし、戻り値ありのパターンある。

また、引数の中で定義した有効範囲は、そのブロックの中でしか使えないので、注意をする必要がある。

・オブジェクトの使い方

①オブジェクトを生成すること
②変数・メソッドを利用すること

①オブジェクトを生成すること
クラス名 オブジェクト名 = new クラス名();
Student stul = new Student( );

new キーを使うと、メモリ上に新しく領域が確保される。配列でも出ました。

デフォルト初期値も入る。このように、プログラムにおいて、オブジェクトを作ることを、インスタンス化という。

②変数・メソッドを利用すること
オブジェクト名.変数名
オブジェクト名.メソッド名(引数)
stul.name = "菅原";
stul.setScore(80,90);

設計図

class Student{
  //メンバ変数(属性)
  String name;
  int engScore;
  int mathScore;
 
   //メソッド(操作)
  void display(){
    System.out.println(name + "さん");
    System.out.println("英語" + engScore + "点・数学" + mathScore + "点");
  }
  void setScore(int eng, int math){
    engScore = eng;
    mathScore = math;
  }  
  double getAvg(){
    double avg = (engScore + mathScore) / 2.0;
    return avg;
  }
}

設計図をもとに、StuSampleクラスを動かしていく。

class StuSample{
  public static void main(String[] args){
    Student stu1 = new Student();

    stu1.name = "菅原";
    stu1.setScore(90, 80);

    stu1.display();    
    System.out.println("平均" + stu1.getAvg() + "点");
  }
}

勉強(演習問題)

ささ、今回は演習問題をやっていくぞ〜〜!!


・以下、問題です。


・自動車を管理する設計図のクラスとして、Carクラスを定義する。Carクラスの持つメンバ変数とメソッドは以下の通りである。

Carクラス(設計図用)

さて、このCarクラスを利用する実行用クラスとして、DriveCarクラスを定義する。DriveCar.javaのコメントに合わせてコードを追加し、プログラムを完成させなさい。

class DriveCar{
  public static void main(String[] args){
    //Carクラスのオブジェクトc1を生成

    //c1のナンバーを2525に設定

    //c1の速度を30に設定

    //c1のナンバー、速度を表示

n//c1の速度を0に設定

    //c1のナンバー、速度を表示

  }
}

・以下、自分の思考です。


まず、

class DriveCar{
  public static void main(String[] args){
    //Carクラスのオブジェクトc1を生成

    //c1のナンバーを2525に設定

    //c1の速度を30に設定

    //c1のナンバー、速度を表示

    //c1の速度を0に設定

    //c1のナンバー、速度を表示

  }
}

上から

    //Carクラスのオブジェクトc1を生成
    Car c1 = new Car();

△ Car();であっているか微妙・・・。

    //c1のナンバーを2525に設定
    c1.no = 2525;

これはメソッドを利用している。

    //c1の速度を30に設定
        c1.speed = 30;

ナンバーと同じこと。(メソッドの利用)

    //c1のナンバー、速度を表示
        System.out.println("ナンバー:" + c1.no  + "速度:" + c1.speed );

△ no, speedだけでいいのか不安。

    //c1の速度を0に設定
        c1.stop();

△ これはそもそも何をやっているかわからんけど、voidなくてOK?

    //c1のナンバー、速度を表示
        System.out.println("ナンバー:" + c1.no  + "速度:" + c1.speed );

さっきと同じ書き方でも、その前に速度を0に設定しているので表示は異なるはず。

ということで、

class DriveCar{
  public static void main(String[] args){
    //Carクラスのオブジェクトc1を生成
    Car c1 = new Car();

    //c1のナンバーを2525に設定
    c1.no = 2525;
   
       //c1の速度を30に設定
        c1.speed = 30;

    //c1のナンバー、速度を表示
        System.out.println("ナンバー:" + c1.no  + "速度:" + c1.speed );

    //c1の速度を0に設定
        c1.stop();

    //c1のナンバー、速度を表示
        System.out.println("ナンバー:" + c1.no  + "速度:" + c1.speed );

  }
}

どうでしょうかね。


・以下は、その後の解説になります。


クラスには、実行用クラスと、設計図クラスがある。

メンバ変数の宣言は、
データ型 変数名

変数名は両方とも与えられているので、そのまま書くだけ。
戻り値、メソッド名、引数{

このように、設計図クラスは作ることができる。

//設計図クラス
class Car{
  //メンバ変数
  int no;
  int speed;

  //メソッド
  void setNo(int n){
    no = n;
  }
  void run(int s){
    speed = s;
  }
  void stop(){
    speed = 0;
  }
  void display(){
    System.out.println("ナンバー" + no + "の速度は" + speed + "です");
  }
}

よって、これに従って、実行用クラスも変わることに注意するべきだった。

作りかた→設計図クラス→実行用クラス/だった!!!
くっそ〜〜

従って、

//実行用クラス
class DriveCar{
  public static void main(String[] args){
    //Carクラスのオブジェクトc1を生成
    Car c1 = new Car();

    //c1のナンバーを2525に設定
    c1.setNo(2525);

    //c1の速度を30に設定
    c1.run(30);

    //c1のナンバー、速度を表示
    c1.display();

    //c1の速度を0に設定
    c1.stop();

    //c1のナンバー、速度を表示
    c1.display();
  }
}

こんな簡単なのか〜〜。。いいね!

ここまで!


少しずつですが、投稿をしております。 noteで誰かのためになる記事を書いています。 よろしくおねがいします。