いや、勉強はしてるんです。paiza/hackerrank

ずいぶん、前の投稿から間が開いてしまいました。

 

勉強自体はしていて、paizaやhackerrankというサイトで勉強しています。

paizaのスキルチェックは、複数のクラスを使ったコートが提出できるんですね。登録してから数ヶ月、1つのクラスに全部書かないとエラーになると思っていました。

 

「えーとインスタンスって何だっけ?フィールド書くのってここだっけ?newってどうやるんだっけ?」とグーグル先生に教えてもらいながらクラスを2つ使って書いています。せっかくなので、今日paizaでやらかしてしまったバグについて書こうと思います。

 

細かく書くと規約違反になるみたいなのでざっと書くと

----------------------------------

Main クラス

Scannerで入力の読み込み

処理

処理

......

 

もう1つ別のクラス

Scannerで入力の読み込み

処理

処理

......

----------------------------------

 

みたいなコードを書くと、nosuchelementとかいうエラーが出てしまいました。不思議なのが、IDEで一行ずつデータを入力したときにはエラーが出ないのに、一度にまとめて入力するとこのエラーが出ると言う点でした。

 

以下のことはあてずっぽうで言っているから正しいか分からないので、あんまり当てにしないでくださいね。

 

たぶん、一度にデータを入力したときには、Mainクラスの方のScannerにデータが読み込まれてしまっていて、もう1つのScannerにデータが来ていなかったんじゃないかと思います。それで入力データが足りなくなり、nosuchelementエラーが出たのだと思います。入力データの読み込みをMainクラスのみでするようにしたら、エラーは出なくなりました。

 

『「スレッドセーフ」に気をつけないと、プログラムが予期しない挙動をするときがある』って聞いたことがあるのですが、こういうことなのでしょうか。グーグルで出てきたスレッドセーフの説明を読んでも、分かったような分からないような...「そうだよ!そういうことだよ!」「何言ってんだぼけ違うわ!」分かる人がいたらコメントをいただけるとありがたいです。

 

それにしても、他のpaizaで勉強している初心者って分からなかったらどうしてるんだろう...規約では「他の人からアドバイスをもらってはいけない」ということになっています。問題の答えそのものじゃなくて、例えば特定のクラスのメソッドの使い方ぐらいだったらいいんでしょうけど、どこまで聞いて良いのかよく分かりません。