LoginSignup
0
0

Javaのprint()内で”+”で数値と文字列の結合したとき出力されるのは文字列か数値か

Last updated at Posted at 2023-12-07

はじめに

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+" ");

で繰り返しの最後のところにスペースが入っていたので間違っていた

image.png

image.png

おわりに

原因は違っていたけど + 演算子の仕様や原因がわかってよかった

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0