@yo810

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

1〜10までの整数をカンマ区切りで横並びで表示させる(10にはカンマをつけない)

初めに

独学でjavaの勉強を行っている初心者です。
本日もいろいろと調べてみましたが、理解できず解決方法がわからなかったため投稿させていただきました。
よろしくお願いいたします。

1〜10までの整数をカンマ区切りで横並びで表示させる(10にはカンマをつけない)

現在、上記の内容を行っています。
1~10までの整数をカンマ区切りで横並びで表示させるまではできています。
【10にはカンマをつけない】
部分で躓いています。
解決方法をご教示お願いいたします。

また下記コードでもっと改善したほうが良い箇所があれば
合わせてお願いいたします。

該当するソースコード

//1〜10までの整数をカンマ区切りで横並びで表示させる
//(10にはカンマをつけない)

public class Sample005 {
	public static void main (String[] args) {
        int[] number = {1,2,3,4,5,6,7,8,9,10};
		for (int i = 0; i < number.length; i++) {
			System.out.print(number[i] + ",");
		}
	}
}

実行結果

1,2,3,4,5,6,7,8,9,10,

開発環境

eclipse

0 likes

5Answer

学習中ということなので解決に繋がりそうなヒントを示す形で回答します。

10にはカンマをつけない

ではカンマをつける条件は何でしょうか。
また、そのような特定の条件に一致する時に何らかの処理を行う方法(構文)は何でしょうか。

1Like

Comments

  1. @yo810

    Questioner

    @blue32aさん
    カンマをつける条件は金額等を表示させるためではないでしょうか?
    String.formatを使用したらよいでしょうか?

  2. カンマをつける条件

    求められる出力は1,2,3,4,5,6,7,8,9,10であるので、「10にはカンマをつけない」ということは「1~9にはカンマをつける」と言い換えられます。

    分解すると次のようになります。

    • 1~10まで繰り返し次の処理を実施
      • 数字を出力する
      • 数字が1~9の場合、カンマを出力する
    public static void main(String[] args) {
        int[] number = {1,2,3,4,5,6,7,8,9,10};
        for (int i = 0; i < number.length; i++) {
            // 数字を出力する
            // 数字が1~9の場合、カンマを出力する
        }
    }
    

    ※ 方法はいろいろありますが、記載のコードから学習範囲に近そうなもので考えています。

  3. @yo810

    Questioner

    @bule32aさん
    ご返信ありがとうございます。
    またご返信が遅くなり申し訳ございません。

    System.out.print(number[i]); //数字を出力する
     if (number[i] != 10) 
    System.out.print(","); //10以外にカンマをつける
    

    上記内容で出力はできましたが、どうでしょうか?

  4. ifやforの学習としては、そのような形が解答例になると思います。

    プログラミングでは、まず日本語で解決方法を考えて1、次にプログラムに置き換える、という順になります。
    分からなくなったときは、このどちらで躓いているかを考えてみるのが良いと思いますよ。

    1. 前回私がやった言い換えや分解、あるいはフローチャートを作るようなイメージです

  5. @yo810

    Questioner

    @blue32a さん
    かしこまりました。
    まずは日本語に分解して考えるを徹底して行っていきたいと思います。
    お忙しい中ご返信とご丁寧な解説ありがとうございます!

  6. オーソドックスにはループ構文の中に条件分岐を追加して、カンマを付与するしないを制御します。

    //1〜10までの整数をカンマ区切りで横並びで表示させる
    //(10にはカンマをつけない)
    class Sample005 {
    	public static void main (String[] args) {
            int[] number = {1,2,3,4,5,6,7,8,9,10};
    		for (int i = 0; i < number.length; i++) {
                if(i < number.length-1){
    			    System.out.print(number[i] + ",");
                }else{
    			    System.out.print(number[i]);
                }
    		}
    	}
    }
    
  7. @yo810

    Questioner

    @mylifewithviolin さん
    ご回答ありがとうございます。
    for文の中に条件分岐を用いて行うのですね!
    コードまで書いていただきありがとうございます。
    こちらのコードが自分が学習していた内容に近い気がします。

  8. あとは条件分岐構文のバリエーションで3項演算子を使うと1行で表現できるので、カンマを付加するか空列を付加するかとかを、コンソール出力文の引数の中に書いてしまうとかは、よくやるような気がします。

    //1〜10までの整数をカンマ区切りで横並びで表示させる
    //(10にはカンマをつけない)
    class Sample005 {
    	public static void main (String[] args) {
            int[] number = {1,2,3,4,5,6,7,8,9,10};
    		for (int i = 0; i < number.length; i++) {
    			System.out.print(number[i] + ((i < number.length-1) ? ",":"") );
    		}
    	}
    }
    
for (int i = 1; i < number.length; i++) {
   System.out.print("," + number[i]);
}
,2,3,4,5,6,7,8,9,10

i=1にして、,を先がパッと浮かびました。

for (int i = 0; i < number.length - 1; i++) {		 
  System.out.print(number[i] + ",");
}
1,2,3,4,5,6,7,8,9,

別のスッキリした方法があるような?

import org.apache.commons.lang3.StringUtils;
for (int i = 0; i < number.length; i++) {		 
  str.append(number[i] + ",");
}
System.out.print(StringUtils.chop(str));
1,2,3,4,5,6,7,8,9,10

ライブリーを使用する反則ワザ

1Like

Comments

  1. @yo810

    Questioner

    @HalHaradaさん
    ご回答ありがとうございます。
    また返信が遅くなり申し訳ございません。
    様々な方法があるのですね。勉強になります。
    ライブリーを使用する方法は応用的な認識でよろしいでしょうか?

色々方法はありますが「10にはカンマをつけない」という観点+αで回答します。
(学習の事を考え、直接のコード記述は避けての回答になります)

■10にはカンマをつけない観点
 ・ループ内で数字を出力する
 ・ループ内でnumber[i]が10 でない 場合、カンマを出力する
 (※偶数の判定をやった時には〇〇文を使ってどのように判定したか思い出してください)

■+αの観点(余力があれば確認してみてください)
 ・配列の中身がどんな数字であっても、
  配列の最終要素を出力したらカンマをつけない、という考え方
 ・0から(配列の要素数 - 1) 未満の間ループする
 ・ループ内でnumber[i] + ","を出力する
 ・ループを抜けたらnumber[配列の要素数 - 1]を出力する

1Like

Comments

  1. @yo810

    Questioner

    @syutorum001さん
    ご回答ありがとうございます。
    また返信が遅くなり申し訳ございません。

    System.out.print(number[i]); //数字を出力する
     if (number[i] != 10) 
    System.out.print(","); //10以外にカンマをつける
    

    一応上記のコードで出力はできました。

    また+aの部分の4点に関しましてはこれからやってみようと思います。
    ご丁寧な回答ありがとうございます。

問題文が『10にはカンマをつけない』なので、↓これが一番素直かな?

System.out.print(number[i]);
if (number[i] != 10) System.out.print(","); //10以外にカンマをつける

もし、解決済みでしたらCloseして読み捨ててください。
1Like

Comments

  1. @yo810

    Questioner

    @nak435さん
    ご回答ありがとうございます。
    また返信が遅くなり申し訳ございません。

    自身で試した結果、@nak435さんのコードにいきつきました。
    出力も問題なくできました。
    ありがとうございます。

1からNまでの整数値をカンマ区切りで表示させたいという話として回答してみます。(N>=1)

  • 既に出ている、for 分の中でif 文をつかい、最後だけカンマをつけないようにする方法

    number[i]を数値10と比較していると、やっぱり20まで出力したいなとなった際に、書き直す必要が出てしまい面倒です。
    number.length-1をNとし、iをNと比較する、などとしたほうが汎用性が高まります。

  • for 文の中の処理を少なくした、先頭で例外処理する方法

    1. 1printする
    2. iを2~10で回すfor 分の中で、","+Integer.toString(i)printしていく
    3. 最後に改行を出すためprintln("")する
  • String変数に代入していって、最後の余計なカンマを削る方法

    1. 空の文字列変数strを用意する。
    2. iを1~10で回すfor 分の中で、StrにInteger.toString(i)+","を結合していく
    3. 最後にstr.substring(0,str.length()-1)で最後の1文字(余計なカンマ)以外を取り出したものをprintlnする
  • おまけ 文字列配列を用意してjoinを使う方法

            int n=10;
            // {"1","2",...,"10"}を生成
            String[] arr = new String[n];
            Arrays.setAll(arr, i -> Integer.toString(i + 1));
            // カンマ区切りで表示
            System.out.println(String.join(",",arr));
    

などの方法があります

1Like

Comments

  1. @yo810

    Questioner

    @akiusmgm さん
    ご回答ありがとうございます。
    また返信が遅くなり申し訳ございません。

    System.out.print(number[i]); //数字を出力する
     if (number[i] != 10) 
    System.out.print(","); //10以外にカンマをつける]
    

    ・上記コードにたどり着いたのですが、これが一番目の方法だと思うのですがどうでしょうか?

    ・二番目はfor文の応用になるのでしょうか?
     書籍でやっているのですが、解説の理解が自分の中で難しいです。
     理解できるように一度コードを書いてやってみます。

    ・三番目についても同様で書籍を使いながら試してみようと思います。

    ご丁寧な回答ありがとうございます。
    まだまだ未熟者で難しいですが、一つずつ理解していこうと思います。

Your answer might help someone💌