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 / 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
論理演算子 &&, ||
・基本データの型変換
表現の幅が広い順〜狭い(自動で)
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クラスを利用する実行用クラスとして、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で誰かのためになる記事を書いています。 よろしくおねがいします。