平成30年秋の問11javaについて質問
平成30年秋の問11javaの設問2とTemplateparserクラスのswitch文について質問です
リンクです。
https://www.fe-siken.com/fekakomon_pm.php
一つ目のjavaの設問2から質問させていただきます。
質問1
なぜ、ウの選択肢である(char )c では現在読み込んだ\の右側だけ格納できるのに対して、オの選択肢であるreader.read()ではその次の一文字を読み込むことができるのでしょうか。
抽象的過ぎてわかりづらく申し訳ありませんが、意味としては
プログラム4TemplateParserクラスの一部分
int c; while ((c = reader.read()) >= 0) {// 質問1について switch (c) {//質問2について case '<' : fragmentList.add(new b ); buf = new StringBuilder(); break; case '>' : fragmentList.add(new c ); buf = new StringBuilder(); break; default : buf.append((char) c); } }
プログラム4からwhile((c=reader.read())のc=reader.read()の部分は
代入演算子が使われているのでreader.read()はcと同じ値を意味していると思い、
ウとオの出力結果は同じだろうと考えてしまいました。
reader.read()は\の部分に加えて、その次文字の'<'や'>'などはどうやって読み取れるているのかがよくわからないです。この場合はエスケープシーケンス?の仕様なのでしょうか
質問2
先ほどのswitch(c)の部分ですが、cはint型に対して、switch文の選択肢のcaseは’<’などchar型となっております。
この場合はint型であるcは char型にキャスト変換されてからswitchが実行されるのでしょうか。
おそらくASCIIコードの数からchar型に対応した番号を読み取ってから実行されているのかと思うのですが。
何卒ご回答の程を宜しくお願いいたします。
0 コメント