はじめに
私はIT講師をやっています。
Paizaは初心者や、新しく言語を学んだ後の軽いコード練習用に丁度いい難易度の問題が多いサイトです。
せめて生徒には"Rank Bくらいまでは解けた方がいいよ"という形でやらせているのですが、今まで一切プログラミング的思考に触れてきていなかった方には難しいですね。
Rank Bあれば最低限、日本語による指示の理解及び、コードに変換できる能力が保証されますので、有象無象だらけの未経験の中ではマシということになりますので。
というわけで、折角のキャンペーンですので解説を記事にまとめてみました。
一度自力で解いてみてから読む方がいいかとは思います。
対象ランクへ挑戦する方向けの記事ですので、あえて解説していない部分もあることはご了承願います。
問題へのリンク
解答コード
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
final String A = scanner.next();
final String B = scanner.next();
scanner.close();
System.out.println(A.equals(B) ? "OK" : "NG");
}
}
解説
A == B
ではなく
A.equals(B)
になることです。
Javaの場合、Stringをはじめとする大文字で始まる型は == で中身が同じかどうかは比較できません。
Stringは参照型です。intやlongといった、小文字で始まるプリミティブ型と異なり、値の中身を直接保存していません。
どこにデータを保存しているかという情報しか入っていない為、 == だとデータの中身が同じかではなく保存場所が同じかどうかという判定になります。
Stringは文字が連なって文字列になっています。ですので、データの保存領域がintやcharと比較しても沢山必要です。大きなデータを取り扱う場合、全部まとめて処理するのではなく、必要なデータを必要な分だけ取り出して扱う方が楽なので、このような仕様になっています。人力で桁の多い計算を行う際、全桁一気に計算するより、一桁ずつ計算していった方が楽なのと一緒です。保存場所ではなく、直接値が入っていて、それをそのまま計算できるデータがプリミティブ型です。Stringはデータが大きすぎるわけですね。
equalsを使用すると、保存場所から中身を取り出して比較してくれます。
終わりに
キャンペーン期間内に全問解説記事の作成が終わるのかが一番の課題ですね...⇒無理でした
解答コードの作成は終わっているのですが、解説記事の作成の方が大変。
途中で飽きないよう応援お願いします。