##概要
Progateを軽くやったくらいでJavaの経験がないため、研修でpaizaのスキルチェック問題を解いているのですが、初日に予想外の所で詰まったのでメモします。
スキルチェックを始めると早々に
文字Nが入力されるのでNを出力せよ
的な内容を指示されます。
System.out.print~で出力して終わりじゃん!と思うのですが
そのまま書くのは間違いとなります。
色々フォローされるProgateと違い
スキルチェックでは入力される値もこちらで読んであげる必要があります。
ここで「入力値を読み込む」方法を知らないと、paizaはDランクすら取れません。
##方法
簡単なのでyoutubeに投稿されているJava標準入力解説を見るか
paizaラーニングを見る事で理解できますが、せっかくなので使い方を書いてみます。
冒頭のような問題の場合、文字なので
//変数を定義
Scanner sc = new Scanner(System.in);
//文字列を取得
String t = sc.nextLine();
これで読み込んであげれば、出力する事ができます。
###数字が入力される場合
数字の場合もほぼ変わりません。
//数字を取得
int t = sc.nextInt();
「nextInt」となっている事に注意しましょう。
###一つずつ読み込む
例えばN Bという1行の形で文字が与えられ、N + Bにする必要があったとします。
N B
この場合、nextLine();にするとNもBもまとめて読み込まれてしまうので
next();を使うと良さそうです。
//Nを読み込む
String x = sc.next();
//Bを読み込む
String y = sc.next();
next()は半角スペースまでを読むので、splitを使わずとも疑似分割できます。
数字の場合でも同じように使う事ができます。
※ただし「文字」として読み込むので、当然Stringの型指定が必要
###複数行を読み込む
1行目に1という数字、2行目にNという文字が与えられるとします。
1
N
この場合、nextInt();,nextLine();でそれぞれ取得すれば良さそうですが
このまま書くとエラーになります。
//間違い例
int t = sc.nextInt();
String a = sc.nextLine();
nextInt()は整数を読むので、実は改行文字が残ったままになります。
この処理だと2行目が読めていません。
なので、nextLine();を追加して読み飛ばす必要があります。
//1行目の整数を読む
int t = sc.nextInt();
//改行文字を読み飛ばす
sc.nextLine();
//2行目の文字を読む
String a = sc.nextLine();
paizaは結構このタイプの問題があるので、覚えておいて損はありません。
自分は何故上手く行かないのか分からなくて、かなり詰まってました...。
他にもListとして取得したりもできますが、値や文字を適切に取得できれば
後はロジックの処理に集中できます。
nextLine();とnext();とnextInt();がそれぞれどういう動きをしているのか、イメージするのが大事です。
##まとめ
知っている人からすると単純な話ですが。Progateや書籍に頼った学習をしていたせいか、予想外の部分で躓いたので参考になればと思います。
先輩の話によると、どうやら実際の現場ではあまり使われないとの事ですが、paizaのスキルチェックを攻略する上では重要な知識です。