文字列比較 ".equals"と".matches"の違い
.equals
String型の文字列など、参照型を比較する際に用いられるのが.equalsです。
文字の大文字・小文字は区別されます。
(区別されない書き方 .equalsIgnoreCase)
一致するとtrue、不一致でfalseを返します。
(int型の整数などを比較する際は「==」の演算子が用いられます。)
参照型で==を用いてしまうと、値の比較がされず参照先の比較をしてしまい、意図した結果が得られません。
結果は、一段目は等しくなく二段目が等しと表示されます。
(一段目は参照先の比較、二段目は文字列の比較となるので)
ここまでは処理結果がtrueの時でしたが、falseを出す方法もあります。
その場合は論理演算子 ! を使用します。(!は論理否定と呼ばれます)
論理演算子は、後ろがboolean型の時に使えます。
trueの時にfalse、falseの時にtrueを表示します。
結果は等しくないですと表示されます。
複数判定させたい場合、論理演算子&&を使用します。
.matches
一致するとtrue、不一致でfalseを返します。指定した文字列と正規表現を比較する際に使われます。
true時にfalseを出す方法は.equalsと同じです。
正規表現とは、文字列のパターンを表す表現方法です。
例えば、A1からA9を表現したい場合には、A[1-9]と表すことができます。
オブジェクト指向とは
サイトや教材を参考にした上で記述していますが、誤っている点がある場合はご指摘いただきますと幸いです。
***
オブジェクト指向
オブジェクト指向とは、簡単でわかりやすく開発をしよう!という概念です。
そのために全てをモノとして考えます。
もしも街をプログラミングで作ろうと思ったら、全てがオブジェクトです。
電車や携帯もオブジェクトですし、道ゆく人もオブジェクトでしょう。
オブジェクトにはプログラムとデータが含まれており、プログラムは動き、データは属性の情報を持っています。
これらが含まれていることで、作業が簡単になります。各モノごとにプログラミングが定義されているため、保守性にも優れています。
インスタンス化(後日書きます。)することでオブジェクトを増やしていくことも可能です。
継承は既存のモノを引き継いで利用することができます。引き継いでいるため、既存のモノは中身が変わると継承したモノも変更が出てしまいます。
カプセル化は、オブジェクトの情報を外部から見えないようにします。
名前を呼ぶだけで動きを実行することができます。
患者が病院で治療を受ける際、知識を知らなくても治療という動きだけを得られる...に近いです。
継承やカプセル化についても後日書いていきます。
保育科文系が内定3つもらって就活を終えた話
今更ですが、自己紹介がてらに就活エントリなるものを書いてみました。
このような情勢ですが、これから就活を控えている方に役立てば幸いです。
***
私は都内の某女子大の保育系学部を卒業しましたが、毎日リモートでJavaの研修を受けている22歳のSE一年目です。
なぜ保育系学部に入ったか
私の母校は保育士資格・幼稚園教諭一種免許を取ることが原則とされていました。同級生の方々の殆どは保育系の仕事だったと思います。
しかし冒頭で述べた通り、私は保育の道ではなく一般企業へ就職し、SE職に就きました。
そもそも私は保育士・幼稚園教諭の志望があまりなく、「何か勉強しなきゃいけないなら興味のある子どものことがいいな」くらいの気持ちで受験する学部を決めていました。
パッとしない文系大学を出るくらいなら、ごまかしのききそうな女子大かつ資格がついてくるところの方が就職するときの幅も広くなるかなとも思ったり
大学に入ってからは周囲に保育系に就職つもりがないことを告げたり、大学4年の就活時期に行われる幼稚園教諭実習を避けるために1年の終わりから3年直前まで教授を説得したりしていました。
就活準備
業種選び
上記のように保育系に入ったにもかかわらずそれ以外を志望していた私ですが、業種選びにはさほど時間がかかりませんでした。
- 営業は嫌(性格的に向いていない)
- 接客も嫌(バイトで懲りた)
- 全国転勤有りも嫌
- 一般職は給料が低くて嫌
- 保育ももちろん嫌
嫌がりすぎじゃないですかね、私。
ともかく上記のことをずっと思っていた私は、消去法なのか積極法なのか、IT企業・SEが真っ先に上がりました。
父親がエンジニアをしていたというのも大きな理由だと思います。
インターン
20卒は3年の夏頃からインターンに行き始めた人が多かったと思うんですけど、(私の周囲だけかな?)夏休みは実習が4週間あったため何もできませんでした。初めて学部選びを後悔しました。
夏休みができなかった代わりに9月から短期のインターンを探し、10月ごろに面接をしました。履歴書も不要で、1時間ほどの雑談の混じった面接でした。合格(?)の知らせを受け、中小企業でのインターンに2度参加しました。一つはIT業界の説明会的なもの、もう一つは3日間にわたるJava体験でした。インターンそのものに行った価値があったのかこの時は不明でしたが、プログラミングが楽しかったこともあり後の志望理由に役立ちました。業界解説のものも、自身で調べるスキルが未熟な私にはありがたいものでした。
就活エージェントの登録
12月中旬ごろ、知人のリサトさんからの案内を受けdodaの新卒エージェントに登録しました。が、事務の手違いなのか説明会は流れてしまいました。
その後、みん就エージェント(2019にサービス終了)とキャリタス就活エージェントに登録。双方から来る企業案内の数が少ないため、2月頃に再びdodaの説明会に参加しました。こちらはいただける企業の数が多く、一番利用させていただきました。
企業の紹介に限らず、志望動機の添削や面接対策等でもお世話になりました。(面接に関してはかなり苦戦するところがあったので後述)
一方、dodaに登録した友人は、「希望した業界の案内がなく、行きたくないIT系しか来ない」と言っていたので、相性の有無はあると思います。
学校の就活支援
ほぼ利用しませんでした。就活セミナー等に参加はしましたが、 あまりいいものではなかったような...(これは大学によるかもしれません)
学内企業説明会もありましたが、希望業種がほとんどなかったので不参加です。
試験対策
ITに絞っていたため、ほとんどの会社でのテスト内容はCABのような規則性のある問題でした。SPIもCABも対策本を買いましたが、あまりやらなかったように思います。(特にSPI)
理由としては、
- 他業界を受けなかったのでSPIが出てくることがほとんどなかった
- SPIに時間を取られる
- 規則性の問題に苦手意識がなかった
また、CABはスマホで取り組める無料のものがあったので、空き時間に触っていました。
本よりスマホで取り組めるものの方が合っていたようです。(これも個人差だと思います)
参考までに、以下は私が取り組んでいたCAB対策サイトです。(CAB 対策 とかで色々出てきます。探してみてください。)
書類選考対策
選考を検討した会社が殆ど中小だったためか、ESの提出はありませんでした。
一社、ESを求められたところがありましたが前述のインターン参加の特典(?)として免除されていました。
履歴書の三大項目であるガクチカ(学生時代に力を入れたこと)・自己PR・志望動機は、リサトさんに全て考えてもらいました。
その中で志望動機はテンプレを(リサトさん・エージェントの手を借りて)作り、それを各企業の特色っぽいものを交えて書いて(言って)ました。
【リサト式志望動機量産法】
1)まず業界全体の志望動機を書く。
2)次に企業のホームページを見て、同業他社と比較し、強みや自分が活躍できるところを見つける。インターンなどの経験があればそれでいいと思ったところを箇条書きにして見つける。
3)なぜIT系の中でも自分がその会社で活躍できると思ったかを書く。
上記はリサトさんによる志望動機の量産方法です。
実は、この時点で面接練習を並行しています。
リサトさん・エージェントによくある質問事項を出してもらいました。
返答を丸暗記ではなく、要点だけ覚えました。
最初は面接練習が嫌だったので、特にエージェント等にお願いすることはなかったのですが、後述する病み期には流石によくないと思いエージェントに面接練習をお願いしました。(3月頃から利用者が殺到でなかなかエージェントの予約ができないので、もっと早くにやればよかったと後悔しました)
面接対策 (説明会→選考ラッシュ)
1月末から説明会や試験に参加し、2月からは一次面接を受けていました。
ビックサイト等で行われている合同説明会に参加することはなく、基本的には各会社が行うものに参加していました。(既に業界が絞られていて行く価値を感じなかったため)
中小企業から大企業まで参加しましたが、大企業は雰囲気が合わないと判断し、説明会のみで切り上げて選考には参加をしていませんでした。
胡散臭さを感じて選考辞退したところは、後日Twitterが炎上して辞退してるにも関わらず面接の案内が2回きました。勘って大事ですね。
最初は説明会を聞いてもよくわからなかったのですが、徐々に他社との比較や、疑問点などが沸くようになりました。この点からも、一つの業界に絞っていたのは良かったように思います。
◆就活病み期
3月頭頃、試験は抜けるのに一次面接で落とされ続け、メンタルが死にました。
就活を支えてくれたリサトさんには色々アドバイスや励ましをもらいましたが、
正直内定が出るまで心は安定しませんよね。
この頃から”行くつもりはないけど内定もらうために受かりそうな会社”もピックアップし始めました。
受かりそうな会社というのは、内定までのプロセスが短くてとにかく規模が小さく他の就活生が集まらなさそうなところを見ていました。数撃ちゃ当たるをやり始めました。
◆東京しごとセンターの紹介
リサトさんから、「東京しごとセンターのすごく優しいアドバイザーを知っているから紹介する」とのことで、東京しごとセンターにリサトさん経由で面談予約しました。
病み期真っ只中であまり期は進みませんでしたが、面談に向かうと柔らかい雰囲気で優しそうな担当者が待っていました。
面接が嫌な話や就活が嫌な話を打ち明けました。アドバイザーからは昔採用担当をやっていたときの心情を聞きだいぶ気持ちが楽になりました。
「面接は行ければ勝ち」 だそうです。
初の内定
3月に初めて一次面接を突破し、3月末にインターンを受けた会社で最終面接がありました。
翌週、その会社から初内定をいただきました。まだ就活を続けたいこちらの意思を組んでくださり、承諾はまだ大丈夫だということで、そのまま就活を続行しました。
一度、面接のフィードバックを兼ねた面談がしたいとのことで予定を組み、後日面談を行いました。承諾するよう強制されるのかなと少し迷いましたが、結果としてはそんなことなく、自身が望む就職先に決めてほしいという言葉と、面談のフィードバックと性格検査の結果を見せていただきました。(内容は全部忘れてしまいましたが...)
一社内定をいただいたことでメンタルも安定し、ここより行きたくないと思う会社の説明会〜選考は全てキャンセルしました。これによってだいぶ数が減り、日程もゆとりが生まれました。
複数内定〜承諾まで
一社内定をもらい自信が出た&決まっているところ以上に行きたいと思う会社だったためか、4月中旬ごろに立て続けに二社内定をいただきました。この時点で最初に決まっていたところには(大変親身になっていただいたのですが)内定を辞退する連絡をし、どちらに行くかを決めることとなりました。
一社は(以下A社)自分でマイナビ経由で応募、もう一社(以下B社)はdodaエージェント経由でした。まずはエージェントに連絡をし、B社の内定者面談を行いたいことを相談しました。事前に聞いておけることを聞き出し、あとは何を聞いた方がいいかのアドバイスをいただきました。その後はA社に個人的に連絡し内定社面談のアポをとり、双方社員の方の話を伺う機会を作ることができました。
面接時の雰囲気が全然違う二社で、最初はA社がいいかなと思っていたのですが、内定社面談後にはB社の方を魅力的に感じ、B社の内定承諾に至りました。私は就活時は未経験だったこともあり、業界以外には特にこの仕事がやりたい!というものがなかったため、待遇面等、仕事とはちょっと違うところを重視で決めました。B社の役員には珍しいねと言われました。(待遇も大事じゃないですか?!)
エントリーしたところは38社。説明会参加は30社弱、内定は3社でした。
コマンドライン引数で入力した文字の有無を判断する
研修で取り組み、自力で解けなかった問題への理解を深めるための記事です。
そのため、この記事はJavaについてのみとなります。
サイトや教材を参考にした上で記述していますが、誤っている点がある場合は指摘いただきますと幸いです。
引数やコマンドライン引数については前記事で解説済みなのでそちらを参照してください
***
練習問題
以下文字配列を作成します
>ねこ、いぬ、うさぎ、パンダ、オオカミ
コマンドライン引数から、引数に動物を1匹指定し、あるかないかを表示する
表示はmainメソッドで行い、判断は別のメソッドで行うこと
上記の問題に対して、一つずつ解説をしていきます。
文字列の作成
String animal = {"ねこ","いぬ","うさぎ","パンダ","オオカミ"};
まず一文目で、この問題で使われる配列の作成をしました
コマンドライン引数のチェック
if(args.length != 1){
System.out.println("動物を1匹入力してください");
return;
}
入力される値の数をチェックします。
!=:左右が違う値の時
この演算子を使って、動物が1匹だけ入力されたかを確認します。0匹,2匹以上の場合は動物を入力するよう促す文章を作成しました。
1匹だけの場合は表示されません。
別メソッドを作り判断する
public static String judgment(String animal,String oneanimal){
String msg = oneanimal + "はいません";
for(int i = 0;i<animal.length;i++){
if(animal[i].equals(oneanimal)){
msg = oneanimal + "がいました";
break;
}
}
return msg;
}
個人的に一番苦労した箇所でした。
for文とif文を挟み、入力した動物(oneanimal)が配列の動物と同じかを比較していきます。動物の名前は文字型なので、"=="ではなく".equals"を使います。
判断メソッドの結果を表示させる
まず一文目で表示させる文章を設定します。(>String msg =)
ここの段階で、もし一致する動物がなかった場合にいないことを知らせる文章を作ります。
そして上記で書いたfor文とif文を挟み、もし一致する動物がいた場合はmsgを更新します。
全処理が終わったところでreturn文で元のメソッドに返します。(return)
System.out.println(judgment(animal,args[0]));
returnで戻ってきた処理を表示して終わりです。
コード一覧
クラス名省略
public static void main(String args){
String animal = {"ねこ","いぬ","うさぎ","パンダ","オオカミ"};
if(args.length != 1){
System.out.println("動物を1匹入力してください");
return;
}
System.out.println(judgment(animal,args[0]));
}
public static String judgment(String[] animal,String oneanimal){
String msg = oneanimal + "はいません";
for(int i = 0;i<animal.length;i++){
if(animal[i].equals(oneanimal)){
msg = oneanimal + "がいました";
break;
}
}
return msg;
}
コマンドライン引数を使って複数のメソッドで複数の数字を計算する
研修で取り組み、自力で解けなかった問題への理解を深めるための記事です。
そのため、この記事はJavaについてのみとなります。
サイトや教材を参考にした上で記述していますが、誤っている点がある場合はご指摘いただきますと幸いです。
***
今回の練習問題はこちらです。
任意の整数2つを入力し、加減乗除と剰余算結果を出す
処理はそれぞれメソッドを作り、表示はmainメソッドで行う
メソッドとは
長ったらしいコードを要素ごとに分割する仕組みです。
定義済み処理(サブルーチン)と同じだと講習で習いましたが、自分で調べていくと少し違うような。
メソッド:プログラミングの部品 一連の処理がまとまったもの
サブルーチン:繰り返し何度も使われるような処理を一つの塊(メソッド?)として定義されている。他のメソッドで処理ができるよう、呼び出すための数値が「引数」であり、処理した数値を呼び出し元に返す際は「返り値」という
関数:返り値が存在するサブルーチン
つまり、メソッドの中にサブルーチンがあり、サブルーチンの中に関数が存在するということだと解釈されます。
コマンドライン引数とは
引数
引数(argument) 英語での意味は論拠,議論等です。
プログラミング用語としては、関数についた括弧内の数値あるいは変数を指します。
実引数,仮引数
引数を送る側が実引数(add(10))、受け取る側(add(int a))が仮引数となります。
public static void main(String args){
// 引数として整数を渡す
add(10);
}
public static void add(int a){
この2つはお互いに
- 型
- 順番
- 個数
が一致していないとエラーを起こします。
コマンドライン引数
mainメソッドに渡す変数の値を指します。
public static void main(String args)
上記メインメソッドの、String argsに相当します。Stringということは配列で複数入れることが可能そうです。
argsってなんだよって思ってたけど引数のことだったようです。
コマンドライン引数を文字型から実数にする
java sample 5 //実行
コンパイル後、実行する際に任意の数字を入力することでmainメソッドの文字列配列に格納されます。このサンプルだと5が任意の数字です。複数入力したい際は半スペース区切りで入力していきます。入力した順に格納されていきます。
public static void main(String args)
mainメソッドの文字列配列はString型なので、このままだと入力した数字が数字として認識されず、文字型として認識されてしまいます。
では、この文字型を整数・実数に変換しましょう。
int a = Integer.parseInt(args[0]);
上記はint型への変換です。double型への変換の場合は、intの部分をdoubleに置き換えます。
args[0]は任意の数字にあたります。配列の一つ目なので。複数数字がある場合は、[1],[2]...となります。
これで任意の数字5はint aに格納され整数と化し、数字として計算ができるようになりました。
処理用のメソッドを作成する
public static int plus(int a,int b){
return a + b;
}
加算のみの処理用メソッドを作成しました。
メソッド名はplus,返り値があるためstaticの後にvoidではなくintをおきました。
仮引数としてa,bを同じ名前のまま使っています。
受け取った引数、処理、返り値を表記します
mainメソッドで表示する
System.out.println("加算結果は" + plus(a,b));
(ここも加算の場合のみの表記です。)
コード一覧
クラス名省略
public static void main(String args){
if(args.length != 2){
System.out.println("整数の引数を2つ入力してください");
return;
}
int a = Integer.parseInt(args[0]);
int b = Integer.parseInt(args[1]);
System.out.println("加算結果は" + plus(a,b));
:
: //間省略
System.out.println("剰余算結果は" + rema(a,b));
}
public static int plus(int a,int b){
return a + b;
}
: //間省略
public static int rema(int a,int b){
return a + b;
}
長くなるので減〜徐は省略しました。同じことの繰り返しでもあるので。
以上、研修の振り返りです。
加筆・修正するかもしれません。