wataruの部屋

20代駆け出しシステムエンジニア 低学歴な人生を歩んで来たため仕事させてくれる社会に感謝しています。 ブログの内容は映画やプログラミングに関することなど...

4章<繰り返し文と繰り返し制御文>

まずはポイントから

 

・while文とdo whileの違いを身に着ける。

・while文 do while文の条件は必ずboolean値ではないとエラーになる

・繰り返し文の処理が一行なら{}は省略できる

・while文の条件にいきなりtrueを指定できる。falseを入れた場合エラーになる

・for文の式1,式2は省略できるが可読性が下がるため基本は避ける

・拡張for文 for(変数宣言 : 参照変数){処理文};  データ型を合わせる

・繰り返し処理をスキップするものとして continue文がある

・ネストした繰り返し文にはラベルを使えます

 

◆while文とdo whileの違いを身に着ける。

 

while文は指定された式がtrueである間処理を続ける。

構文 while(式){  //処理 }

 

do while文はwhile文同様で式がtrueである間処理を続ける。do{}で一度処理を行ってから条件判定をする。

構文 do{ //処理 

        }while(式) 

 

◆while文 do while文の条件は必ずboolean値ではないとエラーになる

 条件式は必ずboolean値にしましょう。

while(i = 1){  //コンパイルエラー
//処理
}

 ◆繰り返し文の処理が一行なら{}は省略できる

while(i = 1) System.out.print("a");
}

do while文の場合は中括弧{}を省略した時、処理を複数行書くとエラーになります。

 

while文の条件にいきなりtrueを指定できる。falseを入れた場合エラーになる

while(true){ System.out.print("a"); //問題なし
}

while(false){ System.out.print("a"); //エラー
}

 

ただ、①の場合無限ループになるので実装する際は、breakできるように条件を書く必要がある。

 

for文の式1,式2は省略できるが可読性が下がるため基本は避ける

①基本的な構文

for(int i = 1; i < x; i++){ //基本 }

②式1と式3を省略した場合

for(; i < x; ;){ }

 

②は省略した形 省略した際はかならずセミコロン[;]は必要です。

 

拡張for文 for(変数宣言 : 参照変数){処理文};  データ型を合わせる

便利なfor文、拡張for文です。

String array[] = {"aaa","bbb","ccc"}

for(String s : array){
//配列の値をすべて変数に入れるまで処理を進めてくれる。
}

拡張for文は()内で指定した参照変数から順に要素を取り出して、変数宣言した変数へ取り出した要素を代入します。このため宣言した変数と参照する変数のデータ型は合わせる必要があります。

 

◆繰り返し処理をスキップするものとして continue文がある

//処理1 for(int i = 1; i < 3; i++){
//処理2 for(int i = 1; i < 3; i++){
if(i = 2){
continue; //次の出力処理をスキップして処理3に移動する。
}
System.out.print("aaa");
}
}

 

continue文は繰り返し処理の中のみ有効なので、繰り返し処理外で記入するとエラーになります

 

ネストした繰り返し文にはラベルを使えます

繰り返し処理がネストしている場合。breakは内側の繰り返しに適用されます。

ラベルを指定することでどの繰り返しから抜けるか指定できます。

loop1:
//処理1 for(int i = 1; i < 3; i++){
loop2:
//処理2 for(int i = 1; i < 3; i++){
if(i = 2){
break loop1; //loop1のfor文をbreakします。
}
System.out.print("aaa");
}
}

 

以上。

 

3章<演算子 条件式>

まずはポイント

・算術演算子 左から計算する()がある場合括弧が優先

・代入演算子 代入するよ

・関係演算子 boolean値で返すよ 

・論理演算子 1つのものと二つのもので評価の仕方が変わる

・基本データ型の比較 参照型の比較は同値性と同一性

・Stringクラスは文字列を参照先を保持するよ

・eqals()メソッドはobjectクラスとStringクラスで違う

 前者は同一性で後者は同値性を比較するよ

・Stringクラスのnewキーワードは新しい文字列を生成しその参照先を保持するよ

 newキーワードを使わない場合、既存の文字列を参照する。

・If文やwhile等の条件式の()には必ずboolean値になるようにしよう

 直接、true,falseを記入しても機能するよ

三項演算子は <条件式> ? <trueのときの値> : <falseのときの値>

・switch文で扱えるデータ型は

{byte char short int enum String}

・swich文にbreakをつけないと次の条件も判定する

・defalut文は末尾におく必要がない breakがないdefalut文はcase文と同じ役割をする

 

◆算術演算子

[+,-,*,/,&]とか数学と同様な演算順序、括弧がある場合は括弧の中の式が優先される

優先度が同じの

場合左から処理されていく

 

◆代入演算子

 =とか、a=1で変数aに1が代入される

 +=や-=のように組み合わせて使用することもある

◆関係演算子

 「a==b」→aとbの値が等しいならtrue「a>=b」

みたいなやつ

◆論理演算子

①「条件1 | 条件2」」

② 「条件1 || 条件2」

③「条件1& 条件2」

④「条件1 && 条件2」

注意ポイントが演算子が一つか二つで少し変わります

演算子が一つのものは条件1が真、偽問わず 条件2を評価します。

③の場合、条件1がfalseであっても、条件2は評価します。

④の場合、条件1がfalseの時点で条件2は評価されません

ここが重要ポイント

①と②も同様です。

②の場合、条件1が真の場合 条件2は評価されません

 

◆Sringクラスは文字列の参照先をもつ

 String hoge = "aaa";

メモリ上にaaaが生成され、ここの参照先をhoge変数がもつことになる。

 

◆eqals()メソッド

objectクラスとStringクラスにはeqals()メソッドが存在する

objectクラスの場合、参照先が同じであるかどうかを評価します(同一性)

Stringクラスの場合、同じ値であるかどうかを評価します(同値性)

 

同一性であるかどうかは(==)で確認することができる。

同値性であるかはStringクラスのeqals()メソッドで確認できる。

 

例 String x = "aaa";

       String y = "aaa;

   

    (x == y)するとこの式はfalseを返します。なぜなら変数xと変数yはそれぞれの

文字列aaaの参照先を保持し、(==)にとって同一性を評価してるから

 

       String x = "aaa";

       String y = "aaa;

 

        x,eqals(y)と評価するとtrueが返される変数xと変数yは同じ値を保持しているから

 

 

String str1 = "java"; //新しくオブジェクトが生成される。
String str2= "java"; // 上記で宣言されたオブジェクトを参照する
String str3 = new String("java"); //オブジェクトが新たに生成される


if(str1 == str2) //trueが返ります 同一性を担保している

if(str1 == str3) //falseが返る 別のオブジェトを指しているので 同一性ではfalseになる

if(str1.eqals(str3)) //trueが返る Stringクラスのeqals();メソッドは同値性を担保するようにオーバライドされているから

 

◆Stringクラスのnewキーワードは新しい文字列を生成しその参照先を保持します

 newキーワードを使わない場合、既存の文字列を参照する。

 

String hoge = new String("aaa");

String hoge2 = new String("aaa");

 

それぞれのメモリ上にaaaを新しく作成します。

newを指定しないで作成すれば既存の文字列aaaの参照先を保持します。

 

 Stringのインスタンスは文字列リテラルを作成するだけで生成される

コンスタントプールという仕組みがあるため

 

同じ文字列リテラルは定数値としてインスタンスとは異なる場所に生成され

そこへの参照が変数に代入される。

 

◆If文やwhile等の条件式の()には必ずboolean値になるようしなければならない

 

   If(a = 1){ // 処理 }

この分はエラーになる条件式が代入になっているから

 

while(true){ // }

この式は実行される 条件式がboolean値になっているから

 

if(a = true){ // }

この式も処理は実行される

 

※直接、true,falseを記入しても機能するよ

 

・switch文で扱えるデータ型

・byte

・char

・short

・int

enum

・String (java7から)

 

・swich文にbreakをつけないと次の条件も判定します

 

 swich(i)

 case 1:

               処理

              break;

   case 2:

               処理

   case 3:

              処理

              break;

 

このケースの場合、case2にあとにcase3まで内容問わず実行されます。

 

三項演算子は a ?  b : c  aがtrueならbを実行 ,aがfalseならcを実行 

 書式: <条件式> ? <trueのときの値> : <falseのときの値>

 

◆defalut文は末尾におく必要がない breakがないdefalut文はcase文と同じ役割をする

 case 1:

               処理

              break;

   defalut: //別にここでもいい。

 

   case 2:

               処理

 

 

 

2章<配列>

まずはポイントから

・配列は参照型

・配列の要素を超えて参照すると実行時エラーが発生します

・配列の宣言はこう データ型 変数名  = new データ型[要素数]

・配列の要素数は.lengthをでとれますint型で返却されます

・可変配列としてArrayListクラスがある

 

 

配列はプリミティブ型(基本データ型)と参照型を格納することができますが

配列自体は参照型になります 

 

配列に対して要素を超えて参照しようとすると実行時エラーになります

Arrayindexoutofboundsexceptionが返される

コンパイルエラーではありません。

配列のNullの箇所を参照しようとするとNullPointerExceptionが返される

ヌルポっていうみたいです。

 

配列の宣言は[データ型 変数名 = new データ型[要素数];]です

なので

 int array = new int[1];

これで要素数が2の配列が作成されます。

new intは要素数の設定みたいなので

int array = {1,2,3};みたいに初期値をいれてもOK

 

ただし、new句で初期化と同時に初期値を入れるのはできない

配列の要素数は.lengthで取得できる 3が返される

f:id:koko55120:20190217001447p:plain

.lenghtで返される値をint型です。

 

javaでは可変配列ArrayListがサポートされている

 

 

ArrayListクラスを使うにはjavaAPIのjava.util.ArrayLsitをインポートする必要がある

f:id:koko55120:20190217001834p:plain

 

import文はclass宣言より上に書くよ

 

ArrayListの宣言

ArrayList<データ型> 変数名 = new ArrayList<データ型>();

 

ListクラスはArrayListと継承関係にあり

List<Integer>  list = new ArrayList<>();でも作成できる 

 

左辺の<>と右辺の<>のデータ型は必ず同じでなければならない

宣言したデータ型以外の型のものは入れることができない

 

例 String型で宣言したArrayListにint型を入れることはできない

 

ArrayListの初期サイズは10で作成される

 

<>はジェネリクスといいArrayListにどの型を格納するか宣言できる

別にジェネリクスを記載しなくても宣言できるが値を入れようとすれば

実行時に警告がでる。また値を取り出すときにキャスト(型変換)を行う必要がある

 

左辺の<>はデータ型を記載するがjava7からは冗長であるため右辺にはデータ型を省略してよい

これを公式ではないがダイヤモンド演算子という

 

ArrayListは参照型でしか宣言できない基本データ型で宣言するとエラーになる

基本データ型を扱うためにもラッパークラスというのが存在する

Array<Integer> hoge = new ArrayLsit<>

これでInt型も扱うことができる

 

ArrayListに値を入れるには.add(格納したいデータ)メソッドを使う

 

array.add("テスト"); 

 

ArrayListの値を取得するには.get(添え字)メソッドを使う。

 

array.get("Test");

 

 

 

 

 

邦画「ちょっと今から仕事やめてくる」を見た感想

ホームシアターで「ちょっと今から仕事やめてくる」を見た感想

f:id:koko55120:20190214014513j:plain

 

この映画 サラリーマンに好評だったらしい

 

この映画のメッセージとして感じたこと

・人生仕事が全てじゃないよ 

・会社に魂を売ってまで無理はするな

・日本人の仕事の考えはこうである

 

良かった点

・仕事に対しての考え方について考えられる。

・シリアスな雰囲気が続くので見終わった後、みんなで熱く語れる

 

悪い点

・肝心な仕事をやめるシーンが結構しょぼい

・仕事を辞めた後も、明るいシーンはなくシリアス

 

 

毎日の体操と社訓を読まされるところがブラック企業感すごい

ãã¡ãã£ã¨ä»ããä»äºããã¦ããã社è¨ãã®ç»åæ¤ç´¢çµæ

 

有給なんていらないって半端ねぇな。。。

心なんて捨てろとかやばい

 

昭和時代の日本の社会をイメージした感じ

転職はできない 入社したら会社に魂を売る

自分の会社にも同じものを感じる...

ãã¡ãã£ã¨ä»ããä»äºããã¦ããã社è¨ãã®ç»åæ¤ç´¢çµæ

 

土下座シーン

ãã¡ãã£ã¨ä»ããä»äºãããã¦ãããåä¸åº§ãã®ç»åæ¤ç´¢çµæ

 

 

オフィスでずっと土下座して謝罪してたら気が散るでしょwww

営業ってやばいなって感じる

仕事で土下座するってことあるんですかね。。。IT業界も

 

 

仕事をやめるシーン ブラック企業っぽい止め方

嫌なら仕事なんてやめようぜ やめる勇気も大事って感じますね

もう少しここのシーンは凝ってほしかったなぁ。。。

やめちゃダメな理由を殴りつけ

それでもやめる理由で返答とか熱くやってほしいところ

 

ãã¡ãã£ã¨ä»ããä»äºããã¦ããããããã·ã¼ã³ãã®ç»åæ¤ç´¢çµæ

 

 

仕事を辞めたあともずっと暗いテンポが続く・・・

やめたあとも開放的にはなるが内容はうーんって感じ。

 

 

この手のタイプは面白いので今後類似作品を探したい。。

 

 

地方飲み 社会人サークルは結構危険

 

社会人を集めたコミニティの危険がある部分について語ります。

とくに地方飲み。

 

地方飲みは、地方出身や上京してきた人が参加する都内で活動が多い飲み会

 

何が危険か結論から言うと社会人サークル及び地方出身飲みは参加者を狙った

宗教系ビジネスの勧誘や商品の勧誘の巣窟です

 

人は一人を嫌がり集団に溶け込みたい気持ちになると思います。友達がいない人や地方から上京してきた人。結構コミニティに参加すると思います

 

地方飲みの危険について個人的な考察

 

地方出身飲みの危険①

場所が都内のレンタルスペースか誰かのマンション ※場所が渋谷なのは特に注意

ãã¬ã³ã¿ã«ã¹ãã¼ã¹ãã®ç»åæ¤ç´¢çµæ

なぜ危険なのか、空間にネットワークビジネスの商品や自己啓発の本が持ち込まれているから。

マンションなら、勧誘用の日用品やサプリとかプロティンがばっちりそろえられています

要は勧誘資材が構えている

 

ここに飲み物持参で手料理が出るor食べ物持参のケースが基本です。しかも内訳不明な参加費が絶対取られます

 

この空間にはトラップだらけ、この料理上手いと言ったら

「この鍋で作ると作りやすいよ、このIHだといいよ」

体の話をすれば

「このサプリで腸内環境治せるよ飲んでみて」

 

すべてが完璧

 

運営者で明らかに何か仕込まれていると思います。

勝手な考察として回収した参加費で運営費や利益に回してる

 

...渋谷が危険な理由(A〇Wayの本社があるから)

 

地方出身飲みの危険②

初参加でも、運営者はめちゃくちゃ親身的にで、呼び名は下の名前でみんなとにかく笑顔 たった一日で内輪に入れる そして、話す内容はすべて将来の自分や仕事の不安や相談

ãNWãã¸ãã¹ãå§èªãã®ç»åæ¤ç´¢çµæ

この点は決して悪いことではないですが、危険なコミニティにある共通点。

 

とにかく地方から来た人に不安を煽る口述をします。

しかも内容はすべて論理的ではない

・君の仕事はAIによってなくなるよ 

・給与平均が○○まで下がるよ

 

だから副業がいいと誘ってくる。主に、人に商品を進める仕事や旅行することで稼げるとかいう絶対怪しいやつは結構鉄板

 

地方出身飲みの危険③

運営側の人間は何かの共通なつながりで、師匠と呼ばれる人がいる。

そして今日は「忙しい中、特別に師匠が来るんです」と言う(特別じゃなくて絶対仕込んでるだろ...)

ã師å ãã®ç»åæ¤ç´¢çµæ

この師匠を起点として洗脳的な会話が始まります。

 

この師匠はこの考えで仕事をやめて成功させた、だからうちらも同じ考えで動いてるって紹介だねだいたい。

 

 

基本的な流れ

集団に誘う→打ち解けさせる→仕事の話→マインドの押し付け→師匠からのひとこと→

本人の意思決定

 

だいたいの地方飲みは運営側のグルが「私たちこんなに充実してるよ、その理由はこのこういう考えをもって仕事をやめた」ってマインド系か「この商品で美味しい料理ができる」「このプロテインは飲みやすい」等の勧誘コース

 

地方出身の人っておそらくNWビジネスの存在とか絶対知らないので標的になるんでしょうね。そうとう悪質

 

地方飲み会はまじで危険

 

こういうのがない田舎とかってほんと幸せだよなって思う。

 

 

 

 

 

マネジメント アローダイアグラム

アローダイアグラムとは

作業の日数等を矢印と数値で表したもの

このアローダイアグラムで求められる数字は以下の通り

 

クリティカルパス

・最早開始日

・最遅開始日

・余裕日数

の4つ

 

クリティカルパスとは作業所要日数が最も長くなるパスです

f:id:koko55120:20190212215007p:plain

この図の場合①→③→④のルートであれば所要日数は「4日」

①→②→④のルートであれば「3日」となるので一番日数が長い

①→③→④のルートがクリティカルパスになります。

 

次に最早開始日とは「先行作業がすべて完了した後、当該作業を最も早く開始できる日」

わかりづらいけど..ある作業を起点と見てその作業に着くまでの工程の作業所要日数が長くなるパスのこと

前の作業が終わって最も早くその作業を開始できる日

下の図で作業「j」に対する最早作業日数と聞かれたらこう考える...

pm06_1.gif/image-size:392Ã232

作業jまでにG,D,BまたはFを終わらせなければならない

jに着くまでのルート

・B→ダミー作業→C→Gの場合 2+3+2=7

・A→C→Gの場合 1+3+2=6

・B→F→ダミー作業の場合 2+2=4

・A→E→ダミー作業の場合 1+2=3

etc...

 

つまり、結点6に対する所要日数は(0~6日)の7日なので最早開始日は7となる

 

次に最遅開始日の考え方

上記図の最所要日数は12日になるので、最所要日数に影響を与えないためにも10日には作業Jを開始しなければならない。

12日から作業Jにかかる日数である2日を引く(12-2)で最遅所要日数は10日となる。

 

 

 

 

 

 

1章<java基礎>

第1章 javaの基礎

Javaプログラムの実行の流れ

Javaのメインメソッドやルール

・変数 リテラル

 

Javaプログラムの流れ

①コーディング[hoge.java]→②コンパイル

f:id:koko55120:20190214235736p:plain

→クラスファイル[hoge.class]→③実行→

f:id:koko55120:20190214235850p:plain

Java実行環境(JVM)で実行される

 ..JVMとはJavaバーチャルマシンのこと

 

Javaのメインメソッドやルール

・ソース内で半角英数字を使用

・拡張子は.java

・空白は半角かタブ (全角はエラーになるよ)

 

classの宣言

ソースファイル内には一つ以上のクラスが必要

public指定のクラスは一つしか記述できない

f:id:koko55120:20190215000452p:plain

 

ソースファイルをコンパイルした結果生成されるクラスファイル名はclass宣言

宣言したclassごとにファイルが生成される

 

f:id:koko55120:20190215000801p:plain

Javaのmain()メソッド

 main()メソッドはjavaの特別なメソッドで記述は必ず

 public static void main(String args){...}となる。この記載がメインメソッド

f:id:koko55120:20190215000015p:plain

※(String args)でも問題ありません。 

 プログラムでは、最初にメインメソッドから実行されます。

 

main()メソッドの書き方でコンパイルエラーとなる例

①・public static void main(string args){ } //stringが小文字

②・public static main(String args){ }         //voidがない

③・public static void main(String) { }  //argsがない 

 実行時エラーになる例

④public static void main(String args){ }    //がない

⑤public void main(String args) { }   //staticがない 

⑥public static void Main(String args){ } //Mainになってる正しくはmain

 

Javaの出力

 

 構文 Sysetm.out.println(".....");

f:id:koko55120:20190215000138p:plain

printlnは出力(print)、行(line)という意味がある

print だけの記述は改行されません。lnをつけることで改行される。

 

・ブロック 文の並びを{}で囲んで一つにまとめたものです。

 単一の文のある場所ならどこでもブロックが書けます。

 メソッド本体も{}で囲んだブロックが使用されます

 ブロックないでしか変数は有効にならないことを注意!

f:id:koko55120:20190215001217p:plain

 

◆変数 リテラル

 

変数の種類と範囲

変数にはプリミティブ型(基本型)と参照型(クラス型)がある

基本データ型の範囲

・byte     8ビット  -2^7~2^7-1(-128~127)

・short 16ビット   -2^15~2^15-1(-32768~32767)

・int        32ビット -2^31~2^31

・long   64ビット  -2^63~-2^63-1

・float     浮動小数点数 32ビット

・double 浮動小数点数 64ビット

・char    16ビット 

・boolean型 真偽値         1ビット

 

リテラルのルール

2進数で表現する場合は頭に 0b をつける

8進数で表現する場合は頭に 0 をつける

16進数で表現する場合は頭に0xをつける

※xは大文字、小文字を問わない

 

Java7からリテラルの途中で'_'アンダースコアを入れることができるようになった

ルールは以下の通り

リテラルの先頭と末尾には記述できない

・記号の前後には記述できない

 

f:id:koko55120:20190215002018p:plain

 

 

文字列は参照型

String str = "Hello";

strには文字列の参照先が値として入るので注意

 

 

ポイント

・Java7からリテラルにアンダースコアが使えるようになった

・変数にはプリミティブ型と参照型がある

・文字列は参照型で変数には参照先が値として入る

 ・変数はスコープの範囲を超えて参照できない(エラーになる)

・変数名に使える記号はドル($)とアンダースコア(_)のみ

・main()メソッドはpublic static void main(String args[]){}