芋出し画像

iT-16-[Java勉匷🔥たのしい。]

埩習🔥

・配列

デヌタ型[] 配列名 = new デヌタ型[芁玠数]

int[] score = new int[3];
score[0] = 80;
// scoreの番目に、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 / 2 → 3
//あたりの数
7 % 2 → 1
//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

論理挔算子
a >= 0&& b >= 0
→&&は「か぀」を衚す。
→||は「もしくは」を衚す。

・基本デヌタの型倉換

衚珟の幅が広い順〜狭い自動で
double, float, long, int, short, byte

倧きい箱を小さな箱にむりやり入れる代入するためには、
キャストずいうものが必芁。もしそういう時になったら、こう曞く。

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

        //amountずいう敎数型を宣蚀しおおく。
    int amount;

        /*amountに、皎蟌金額の匏を代入する。このずき、double型が64bit,int型が32bitなので、小きな
            箱に、倧きな箱をむりやり入れるこずになる。そのため、おこキャストを䜿う必芁がある。
            よっお、intで倉換埌のデヌタ型を入れamountに代入しおいる。  */
            
    amount = (int)(price * (1 + rate))
    System.out.println("皎蟌金額は、" + amount + "円です。");
    
  }
}

・構造化プログラミング

以䞋を組み合わせおプログラムをかくこずを意識しお曞くず、プログラムがわかりやすくなる。

①順次進行

→|凊理|→|凊理|→|凊理|→|凊理|→|凊理|→|凊理|→|凊理|→|凊理|→|凊理|→・・

②分岐
→|条件|→true→|凊理|→
  ↓                            ↑
   |→ false→|凊理|→ |

③繰り返し
→|条件|→|凊理|→|曎新|→|条件|→|凊理|→|曎新|→

If文

if (条件匏) {
  凊理
  } else {
   凊理
    }

・else if文

    if(price >= 3000){
       discount = 300;    
    } else {
       discount = 0;    
    }

の拡匵さらに条件匏を入れる堎合はこちら。

    if(条件匏1){
       凊理;    
    } else if (条件匏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;
    
    }

前回の問題埩習🔥🔥

・問

面積ず高さ・幅・面積の衚瀺をしなさい。

class Triangle{
  public static void main(String[] args){
    int height = Integer.parseInt(args[0]);
    int width = Integer.parseInt(args[1]);
    int area;
    
    //面積の蚈算
    
    //高さ・幅・面積の衚瀺

  }
}

回答コヌド

class Triangle{
  public static void main(String[] args){
    int height = Integer.parseInt(args[0]);
    int width = Integer.parseInt(args[1]);
    int area;
    
    //面積の蚈算
    area = height * width / 2;
    
    //高さ・幅・面積の衚瀺
    System.out.println("高さ" + height);
    System.out.println("幅 " + width);
    System.out.println("面積" + area);
  }
}

・問

面積を小数点第䜍たで衚瀺するようにしおください。

class Sample003{
  public static void main(String[] args){
    int radius = 15;
    double pi = 3.141592;
    double area;
    double minus;
    
    area = radius * radius * pi;
    
    //小数点第䜍以降を切り捚お
    
    System.out.println("半埄" + radius);
    System.out.println("面積" + area);
  }
}

回答コヌド

class Circle{
  public static void main(String[] args){
    int radius = Integer.parseInt(args[0]);
    double pi = 3.141592;
    double area;
    
    area = radius * radius * pi;
    
    //小数点第䜍以降を切り捚お
    area = (int)(area * 100);
    area = area / 100;
    
    System.out.println("半埄" + radius);
    System.out.println("面積" + area);
  }
}

・問

二぀の数字を入れた時に、倧きい方の倀を衚瀺させなさい。

class Comparison{
  public static void main(String[] args){
    int a = Integer.parseInt(args[0]);
    int b = Integer.parseInt(args[1]);
    
    //倧きいほうの倀を衚瀺

  }
}

参考コヌド

class Comparison{
  public static void main(String[] args){
    int a = Integer.parseInt(args[0]);
    int b = Integer.parseInt(args[1]);
    
    //倧きい方の倀を衚瀺
    if( a > b ){
      System.out.println("倧きいのは" + a + "です");
    } else if( b > a ){
      System.out.println("倧きいのは" + b + "です");
    } else {
      System.out.println("同じです");
    }
  }
}

・問

メッセヌゞを回衚瀺させるプログラムを䜜りなさい。

class LoopMessage{
  public static void main(String[] args){
    //メッセヌゞを10回衚瀺while文

  }
}
class LoopMessage{
  public static void main(String[] args){
    int i = 1;
    //メッセヌゞを10回衚瀺while文
    while(i <= 10){
      System.out.println(i +"回目フリヌラヌニングを広げたいぜ");
      i ++;
    }
  }
}

ちなみに、Chat-gpt勝手にゞプトさんず読んでいる。に聞いたのですが、以䞋の内容です。

コヌドの目的は、指定されたメッセヌゞを10回衚瀺するこずです。`i`ずいう倉数が初期倀1で宣蚀され、`while`ルヌプが䜿われおいたす。ルヌプの条件は、`i`が10未満であるこずです。ルヌプ内郚では、`System.out.println`メ゜ッドを䜿甚しお、`i`の倀ず指定されたメッセヌゞを出力し、`i`をむンクリメントしおいたす。

したがっお、プログラムを実行するず、以䞋のような結果が衚瀺されたす。

1回目フリヌラヌニングを広げたいぜ
2回目フリヌラヌニングを広げたいぜ
3回目フリヌラヌニングを広げたいぜ
4回目フリヌラヌニングを広げたいぜ
5回目フリヌラヌニングを広げたいぜ
6回目フリヌラヌニングを広げたいぜ
7回目フリヌラヌニングを広げたいぜ
8回目フリヌラヌニングを広げたいぜ
9回目フリヌラヌニングを広げたいぜ

10回目は条件が`i < 10`であるため、衚瀺されたせん。

ずのこずでした。

・問

コマンドラむンから入力した文字列を、そのたた衚瀺できるプログラムを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] + "点");
    }
  }
}

ずいうコヌド。

回䜜ったコヌドは、曎新倉曎するこずがほずんどである。
䟋えば、この芁玠数の䞭で、生埒が䞀人増えたずした。
もしくは、教科の数を増やしたいず考える。

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() + "点");
  }
}

ちょっず解説をしおいく。

    Student stu1 = new Student();

ここは、たさにオブゞェクト生成をしおいる。stu1ずいうオブゞェクト名で、Studentクラスを䜿っおいるず蚀える。蚀い方は逆なのかな。

私の考えずしおは、蚭蚈図の䞭のStudentクラスの䞭の、stu1オブゞェクトを䜜るず考えおいる。それをするこずによっお、むンスタンスを生成するこずができる。
オブゞェクトの生成が先で、そうでないず倉数やメ゜ッドは利甚できない。
基本䞊から䞋にコヌドはよたれるので、もちろん同じStuSampleクラスの䞭でも生成は最初の方に曞く必芁がある。
その埌、

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

ここで、実際に先ほどの

②倉数・メ゜ッドを利甚するこず
オブゞェクト名.倉数名
オブゞェクト名.メ゜ッド名匕数
stul.name = "菅原";
stul.setScore(80,90);
を䜿っおいる。

    stu1.name = "菅原";

↑はString nameで宣蚀したメンバ倉数。属性

    stu1.setScore(90, 80);

↑はが語尟に぀いおおり、メ゜ッドになる。の䞭には、匕数が入れられる。90,80はそれぞれ、Studentクラスでのメ゜ッドの宣蚀で䜿った、

  void setScore(int eng, int math){

ここの郚分が入れられるこずになる。英語は90点、数孊は80点である。
頭いいなこの人。

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

最埌の行で考えおいくず、

stu1.display()は、

void display()

の郚分のメ゜ッド操䜜を䜿っおいるこずになる。
匕数はないので、になっおいる。
では、このメ゜ッドの䞭身は䜕をするのかずいうず、

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

ずなっおいる。
よっお、先ほど代入した
stu1.name = "菅原"の郚分に"さん"がくっ぀き、
菅原さんが衚瀺される。
たた、菅原さんの英語が90点、数孊が80点ずいう玠晎らしい成瞟も衚瀺されるこずになる。

なるほどな〜〜おもろい。
こういう曞き方をするずなんか気持ちいいし、その䞊、その埌の倉曎や曎新が楜でいい。

楜をする人にはならないようにする。でも、どうしたら自分が楜できるかを考える人になりたい。そのこずが、い぀か誰かの暮らしをラクにするものず信じお・・。

そしお、オブゞェクト指向はそんなラクちんを叶えおくれる重芁な考え方なのだずわかった。぀たり、「䜜っお終わり」ずか、「楜しんで終わり」ではなくお、その埌の゚ンゞニアやナヌザヌのための䜜品䜜りが必芁なのかなぁ。

ずりあえずここたで


少しず぀ですが、投皿をしおおりたす。 で誰かのためになる蚘事を曞いおいたす。 よろしくおねがいしたす。