##はじめに
今までエンジニアとして働いてきたのですが、主に上流工程ばかりで、実装が殆どできずやばいと思って、競技プリグラミングやり始めました。なんとか一問解きましたが、そこでつまずいたことを備忘録として載せます。
今回はデータ入力のScanner
について書きます。
##挑戦した問題
Atcodeの過去の得点100の問題…つまり簡単な問題です。
##提出1回目
色々なサイトを見ながら四苦八苦しつつもなんとかコーディングし、vscodeのターミナルから実行して想定通りの結果を得ることができました。以下がコード内容(おそらく有識者からみたら、汚いコードですがご容赦を。。)
public class Main {
public static void main(String args[]) {
String answer = "YES";
String[] haiku = args;
int sum = 0;
for(int i = 0; i < 3; i++){
if(haiku[i].equals("7") || haiku[i].equals("5")){
sum = sum + Integer.valueOf(haiku[i]);
System.out.println(sum);
}
else{
answer = "NO";
}
System.out.println(haiku[i]);
}
if(sum != 17){
answer = "NO";
}
System.out.println(answer);
}
}
##結果
####実行時エラー…中身を確認すらしてもらえず…\(^o^)/
##何がだめだったのか
入力方法が単純にだめだったみたいですね。
ターミナルでJava Main X X X
と入力するとスペース区切りで配列args
に格納されるので、大丈夫と思っていましたが完全に見誤っていました。
##どうすればよかったのか
入力内容を取得するときにScanner
を使うとよいとのこと。next();
の部分で入力を取得、もう一度使用すると次の入力値が取得できます。
Scanner sc = new Scanner(System.in);
int i = Integer.parseInt(sc.next());
##提出5回目
コードを何度もリファクタリング(用語使いたがりのにわかですみません。。)してなんとかクリアしました笑
import java.util.Scanner;
public class Main {
public static void main(String args[]) {
String answer = "YES";
Scanner s = new Scanner(System.in);
int sum = 0;
for(int i = 0; i < 3; i++){
int haiku = Integer.parseInt(s.next());
if(haiku == 7 || haiku == 5 ){
sum = sum + haiku;
}
else{
answer = "NO";
}
}
if(sum != 17){
answer = "NO";
}
System.out.println(answer);
}
}
##参考サイト
https://qiita.com/p_shiki37/items/a0f6aac33bf60f5f65e4
https://uxmilk.jp/48686
####何かご指摘等ありましたら、ご遠慮無くおっしゃってくださいーm(_ _)m