はじめに
Javaを学ぶため、Paizaのスキルアップ問題に取り組んでいたところ、うまくいかず少しだけ悩んだのでアウトプット
問題
スキルアップ問題で、
入力された数値を読み取り、0の数=何個、1の数=何個 ....9の数=何個
というように出現回数を出力する問題
問題URL
https://paiza.jp/works/mondai/data_structure/data_structure__dict_step1
自分の回答
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
List<Integer> a = new ArrayList<>();
for(int i=0;i<n;i++){
a.add(sc.nextInt());
}
for(int i=0;i < 10;i++){
int count = 0;
for(int j=0;j<n;j++){
if(a.get(j)==i){
count +=1;
}
}
System.out.print(count+" ");
if(i==9){
System.out.println();
}
}
}
}
動作確認で同様の値が出力され正解かと思ったが、正解にならなかった
解決方法
原因は
System.out.print(count+" ");
の部分
このように直したらOKだった
System.out.print(count);
if(i==9){
System.out.println();
}else{
System.out.print(" ");
}
調査内容
理由の考察
- +演算子の仕様 文字列と数値が入れ子になってる?
理由がよくわからず、しらべてみた
+演算子の仕様
下記らしい
- +演算子をつかって連結する場合、左から連結されていく
String s = 45 + 18 + "point";
System.out.println(s); // 63point 計算されてから文字列になる
最初が文字列なら次も文字列として足していく
String s = "point" + 45 + 18;
System.out.println(s); // point4518
しらべたけどあまり関係なさそう
printメソッドは文字列として出力するので、数値が出力されているというわけではない
原因
単純に
System.out.print(count+" ");
で繰り返しの最後のところにスペースが入っていたので間違っていた
おわりに
原因は違っていたけど + 演算子の仕様や原因がわかってよかった
参考