お疲れ様です!!
さて、5日目の最後でTim先生が出したチャレンジ、、、
結局、分からないままモヤモヤして眠りにつきました。
そして迎えた6日目。
とりあえず、Tim先生の動画を見ることに。
すると、まず最初に前回のチャレンジの解説から。
ありがたいです、Tim先生!!
Map m = new HashMap();
String str = “hello my name is tim and i am cool”;
for(char x : str.toCharArray()) {
if(m.containsKey(x)) {
int old = (int)m.get(x);
m.put(x, old + 1);
}
else {
m.put(x, 1);
}
m.remove(‘ ‘);
}
System.out.println(m);
}
}
いやいや、Tim先生、、、
習ってないやつめっちゃありますやん、、、
いきなり「toCharArray」とか出てますやん、、、
とりあえず順番に読み解いていこう!!
Map m = new HashMap();
Map をHashMapとして宣言!!
String str = “hello my name is tim and i am cool”;
文字列strは、”hello my name is tim and i am cool”です!!
for(char x : str.toCharAllay());
文字xは、文字列strを文字の配列に変換したうえでループします。
toCharArrayは、String型の文字列をChar型(文字)の配列に変化させるとのこと。
char x : str.toCharArray()
のところを、
char x : str
とかにしたら、文字列を反復処理できませんということでエラーになるわけです、、
if(m.containsKey(x)){
もし、文字配列から文字xを見つけたら、マップのmに格納します。
containsKeyは、指定したキーが存在するかを確認するメソッドですね。
int old = (int)m.get(x);
ここが一番わからん!!
今(2月12日)でもわからん!!
ということで、AI先生に聞こう!!
(AI先生より)
Map m に格納されている特定のキー x に対応する値を取得し、それを整数型intに変換して変数oldに代入しています。
・m.get(x)
mは、キーと値のペアを格納するMapです。
get(x)は、Map m からキー x に対応する値を取得するメソッドです。
例えば、mにキー”a”に対して値3が格納されている場合、m.get(“a”)は3を返します。
・(int)
(int)は、キャスト演算子と呼ばれ、データ型を整数型(int)に変換します。
m.get(x)が返す値は、Object型という汎用的な型であるため、整数として扱うためには明示的に
int型に変換する必要があります。
なるほどね!!
そもそも、.get()の意味を既に勘違いしてた!!
.getがゲットしてくるのは、キーの「値」ね!!
(int)とかいう表現も初めて見たけど、なんとなく分かったかな!!
ちなみに()を付けなかったら、「Objectからintに変換できません」とかいってエラーになりました。
m.put(x,old + 1);
キー x と、キー値を返してください!!
キー値は2つ目の文字見つけたら+1してね!!
この「+1」が無かったら、全部の文字の値が1になる。
+1が無いと、2つ目の文字を見つけた時にMapの特性上、1つ目の文字を上書きするからと考えます。
else {
m.put(x, 1);
}
その他の場合は、x,1と返してください。
うーん、、、
これもよう分からん、、
「これいる??ifのところで値をゲットしてるんやしいらんのんちゃうん」
と思い、消して実行してみました。
すると、、、
{}
何も返されませんでした。
(AI先生より)
elseブロックは、初めて出現する文字に対して、Map m に初期値を設定するために必要不可欠。
例えば、helloの場合、
hに遭遇→elseにより{”h”,1}として追加
eに遭遇→elseにより{“h”,1,”e”,1}として追加
lに初めて遭遇→elseにより{“h”,1,”e”,1,”l”,1}として追加
lに2回目遭遇→ キー”l”は既に存在するので、ifブロックで設定した通り、カウントを増加させる
oに遭遇→elseにより{“h”,1,”e”,1,”l”,2,”o”,1}として追加
なるほど、elseを「その他の場合は」としか考えてなかったからイメージできなかったけど、そういうことか!!!
m.remove(‘ ‘);
これはスペースは削除ですね。
これ入れなかったら、スペースもカウントして表示させることになりました!!
“”にしたらエラーになったので、注意が必要ですね!!
まだ6日目は終わってませんが、、、
ちょっと疲れたしキリがいいので、この記事はこんな感じで!!
ではでは!!