6日目①(2025.02.05)<Mapの活用>


お疲れ様です!!

さて、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日目は終わってませんが、、、
ちょっと疲れたしキリがいいので、この記事はこんな感じで!!


ではでは!!

コメントを残す