• ベストアンサー

ループ処理の際、最後だけ","をつけたくない

for(int i = 0; i < a.length; i++){ System.out.print(a[i]+","); } 配列aの要素を並べて表示する時、System.out.print中に","をつけると、配列要素の最終部にまで , がついてしまいます。(・・・・43,3,98, のように) 最後だけ "," をつけたくない場合、どのように記述すればいいのでしょうか。

noname#45614
noname#45614
  • Java
  • 回答数5
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • HarukaV49
  • ベストアンサー率53% (48/89)
回答No.4

こういう場合は、三項演算子を使うのが常套手段でしょう。 for(int i = 0, n = a.length; i < n; i++){ System.out.print( a[i] + ( i!=n-1 ? "," : "" ) ); } 三項演算子は、使い方によっては非常に可読性が悪くなりますが、 この場合は、ifステートメント(ブロック)を使うよりも 分かりやすいと思います。

その他の回答 (4)

回答No.5

分かりやすく(長いけど)StringBuilder で appned(",") や deleteCahrAt メソッドをうまく使うとかはだめ?

  • buriburi3
  • ベストアンサー率44% (353/792)
回答No.3

a[i]+"," で最後だけカンマを付けないと考えると最後が何処なんだか分からない場合に難しいです。 他の方も回答してるように ","+a[i] で最初だけカンマを付けないと考えると簡単です。

  • m-oosgi
  • ベストアンサー率62% (10/16)
回答No.2

普通に for (int i = 0; i < a.length; i++) { System.out.print(a[i]); if(i!=a.length-1){ System.out.print(","); } } とかじゃダメなんですか? 1ステップで、とか。

回答No.1

それはif文などで場合分けせずに書きたい、という事ですよね。 System.out.print(a[0]); for(int i = 1; i < a.length; i++){ System.out.print(","+a[i]); } これで一応実現可能ですが、これは必ずa[0]が存在する場合だけ安全なコードです。

関連するQ&A

  • 配列のコピーをして値を返したいが

    //配列のコピーをして値を返したい import java.util.*; public class Test7_22 { static int[] arrayClone(int[] a){ int[] b = new int[a.length]; for(int i =0;i>a.length;i++) b[i] = a[i];//ここで代入されるはず return b; } public static void main(String[]args){ Scanner std = new Scanner(System.in); System.out.print("要素数:"); int n = std.nextInt(); int[] a = new int[n]; for(int i=0;i<n;i++){ System.out.print("a["+i+"]="); a[i] = std.nextInt(); } int[] x = arrayClone(a); for(int i=0;i<a.length;i++) System.out.println("x["+i+"]="+x[i]); } } //コンパイルするとb[0] = 0になる

    • ベストアンサー
    • Java
  • ループの終わらせ方

    あるboolean配列でtrueなら■falseなら□を表示させ、時間とともにある規則で動かしていくプログラムを組みました。配列の宣言などを省略してますがこんな感じです。 do{ boolean[] box2 = (boolean[]) box.clone(); for ( i = 0; i < box2.length; i++) { if (box2[i]) { // コピーの玉があったら // 右方向に向かって空き箱を探す。 for (int j = 1; j < box.length; j++) { int p = (i + j) % box.length; if (! box[p]) { // 空き箱を見つけたので玉を入れる(trueにする)  box[p] = true; // 元の場所は玉を消す(falseにする) box[i] = false; // box2[i]はもう二度と調べないのでそのまま放置 break;   } }   } } box2 = null; for(h=0; h < box.length; h++){   if(box[h] == false) System.out.print("□"); if(box[h] == true) System.out.print("■"); } r++; }while(box == box && r<20); ちなみに表示結果は □■■□□■□□■□□■ ■□□■■□■□□■□□ □■□□□■□■■□■□ ・ ・ こんな感じになります。ここで質問なんですが、 過去と同じ配置の配列が出てきた時点でwhile文の ループを終わらせるにはどうすればよいでしょうか? 現時点ではループが20回になった時点で止めるようにしてます。

  • 多次元配列の処理について

    多次元配列を扱った処理を行ないたいのですが、一部でnullを受け取ってしまい、処理を行うことができません。 引数の配列には次のようなテキストが入っています。 --配列の内容-- 0,名詞-一般,1,5, 0,名詞-数,2,6, 0,名詞-接尾-助数詞,3,7, -------------- この配列をコマンドラインに書き出すと正確に表示されます。 しかし、配列の内容を参照して処理を行なうと2列目の処理のときにnullを参照してしまいます。 プログラムは以下のとおりです。 ---プログラム--- public class Dist {   public static int zairyo(String[][] date) {    int a = 0;    int b = 0;    int c = 0;    int d = 0;    int e = 0;    if(date != null) {     int f = 0;     System.out.println("//Dist//");     for(int m = 0; m < date.length; m++) {      for(int n = 0; n < date[0].length; n++) {       if(date[m][n] != null) {        System.out.print(date[m][n] + "\t");        f++;        if(f == date[0].length) {         System.out.println("");         f = 0;        }       }      }     }     for(int i = 0; i < date.length; i++) {      if(date[i][1] != null) {       if(date[i][1] == "名詞-一般")        a++;       if(date[i][1] == "名詞-数")        b++;       if(date[i][1] == "名詞-接尾-助数詞")        c++;      }else System.out.println("2列目null");     }     int j = date.length - 1;     d = Integer.parseInt(date[j][2]);     e = Integer.parseInt(date[j][3]);    }else System.out.println("Dist:null");    if(a > 0 && b > 0 && c > 0 && d <= 10 && e <= 15) {     return 1;    }else return 0;   } } ------------------------ 原因は何なのでしょうか? ご教授お願いします。

  • 配列のインデックス番号を返したいが

    インデックス番号を返したい x[0]=1 x[1]=2 x[2]=3 x[3]=3 x[4]=5 の場合で探す(返す)値を3とした場合⇒2,3と値が返るようにしたい import java.util.*; class Test7_23 { static int[] arraySrchIdx(int[] a,int x){ int idx = 0; for(int i=0;i<a.length;i++){ //A if(a[i]==x){ a[i] = i; idx++; } else{ a[i] = 0; } } for(int i=0;i<a.length;i++) //B System.out.println(a[i]); int[] b = new int[idx]; for(int i=0;i<a.length;i++){ if(a[i] != 0) for(int j=0;j<idx;j++) b[j]=a[i]; } for(int i=0;i<idx;i++) System.out.println("b["+i+"]="+b[i]); return b; } public static void main(String[]args){ Scanner std = new Scanner(System.in); System.out.print("配列の要素数は:"); int n = std.nextInt(); int[] x = new int[n]; for(int i=0;i<n;i++){ System.out.print("x["+i+"]="); x[i] = std.nextInt(); } System.out.print("探す値:"); int a = std.nextInt(); int[] b = arraySrchIdx(x,a); for(int i=0;i<b.length;i++){ System.out.println(b[i]); } } }

  • Java初歩。ループ問1~6の内1・2

    コンパイルの環境はあります。 『問題は、全て、 「forループ」を使って記述しなければなりません。 そして、 ループは、「forループのみ」と、限定されています。 (1)~(2)は、他にどんなやりかたがあるのか興味がありまして、質問させて頂きました。 (3)からは、ずっと試しているのですが、全くできません… (1) 100、50、200、150、300を管理している配列を作成し、その合計を実行結果のように 出力したいです。どう組めばよいのでしょうか? (1)の実行結果 800 (2) 100、50、200、150、300を管理している配列を作成し、その平均値を 実行結果のように出力する為にはどのようにくんだらよいのでしょうか?。 (2)実行結果 160 例えば、(1)はこんな感じでしょうか? class exercise_4_1 { public static void main(String args[]){ int a[] = new int[5]; a[0] = 100; a[1] = 50; a[2] = 200; a[3] = 150; a[4] = 300; int z = 0; for(int i = 0;i < args[0].length(); i++){ z += a[i]; } System.out.println(z); } (1)~(6)問目までありますので、よろしくお願いします。

  • 処理の途中で不正な文字が表示される

    学校でjavaを勉強しています。 「指定した配列と、その配列中の最大値を表示させる」という プログラムを作りたいのですが、コンパイルし実行すると ↓のように表示されてしまいます。どこに問題があるのでしょうか?教えてください。 配列a[] = { 3 最大1 1 最大5 5 4 0 5 -1 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsExcept ion: 7 at kadai5.main(kadai5.java:13) 元のプログラムは↓です。 class kadai5{ public static void main(String[] arg) { int i=0; int max=0; int[] score={3,1,5,4,0,5,-1}; int n=score.length; System.out.print("配列a[] = { "); while(i<n){ System.out.print(score[i]+" "); i=i+1; if(max<score[i]){ max=score[i]; System.out.println("最大"+max); } } System.out.println("}"+"\n\n"); System.out.println("最大値は"+max+"です。"); } }

    • ベストアンサー
    • Java
  • booleanの戻り値について

    配列の等価判定をしたいのですが思うように動かないです。 助けてください import java.io.*; class Kadai4 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int[] TBL1; int[] TBL2; TBL1 = new int[5]; TBL2 = new int[5]; boolean flg=true; System.out.println("配列1を入力"); for (int i = 0; i <= 4; i++) { String s1 = br.readLine(); int t1 = Integer.parseInt(s1); TBL1[i] = t1; } System.out.println("配列2を入力"); for (int i = 0; i <= 4; i++) { String s1 = br.readLine(); int t1 = Integer.parseInt(s1); TBL2[i] = t1; } // 配列表示 System.out.println("配列表示"); for (int i = 0; i < TBL1.length; i++) { System.out.print(" TBL1[" + i + "]=" + TBL1[i]); } System.out.println(""); for (int i = 0; i < TBL2.length; i++) { System.out.print(" TBL2[" + i + "]=" + TBL2[i]); } toka(TBL1, TBL2); System.out.println(""); if (flg == true) { System.out.println("配列は等価"); } else { System.out.println("配列は非等価"); } } private static boolean toka(int[] ss1, int[] ss2) { boolean flg = true; for (int i = 0; i < ss1.length; i++) { if (ss1[i] != ss2[i] || ss1.length != ss2.length) { flg=false } } return flg; } }

  • Java初歩。ループ問1~6の内3・4

    コンパイルの環境はあります。 『問題は、全て、 「forループ」を使って記述しなければなりません。 そして、 ループは、「forループのみ」と、限定されています。 (1)~(2)は、他にどんなやりかたがあるのか興味がありまして、質問させて頂きました。 (3)からは、ずっと試しているのですが、全くできません…悔しいです。。 (3) 100、50、200、150、300を管理している配列を作成し、合計値を算出 した上で、それぞれ値が合計に占める割合をパーセントを用いて実行結果のように出力する為には どのようにプログラムをくめばよいのでしょうか? (3)実行結果 12.5% 6.25% 25.0% 18.75% 37.5% (4) 問3を修正して、割合だけを表示するのではなく、元の数と最大値である旨も 表示するようにしたいです。どのようにくめばよいのでしょうか? 問4の実行結果     100:12.5%     50:6.25%     200:25.0%     150:18.75% 最大値>300:37.5% ちなみに、とまっている(3)は、こんな感じかなぁとやったんですが、だめでした。。。↓ class exercise_4_3 { public static void main(String args[]){ int a[] = new int[5]; a[0] = 100; a[1] = 50; a[2] = 200; a[3] = 150; a[4] = 300; int z = 0; for(int i = 0;i < 5;i ++){ z += a[i]; } int x = 0; for(int i = 0;i< 5;i ++){ x = i / z * 100; System.out.print(x + '%'); System.out.println(""); } } } (5)(6)をありますので、よろしくお願いいたします。

    • ベストアンサー
    • Java
  • JAVAで配列を使って * を縦向きのグラフで表示したいです。

    JAVAの勉強をしています。 このプログラムは配列に乱数を生成して * を 横向きにするプログラムです。 練習問題で、以下のプログラムを書き換えて、* を縦向きのグラフで表示する問題なのですが、解く方法がわかりません。 どなたか答えもしくはヒントを下さい。 よろしくお願いします。 import java.util.Random; import java.util.Scanner; public class Test06_04 { public static void main (String[] args) { Random rand = new Random(); Scanner stdIn = new Scanner(System.in); System.out.print("要素数 : "); int n = stdIn.nextInt(); //要素数を読み込む int[] a = new int[n]; //配列を生成 for (int i = 0; i < n; i++) { a[i] = 1+ rand.nextInt(10); } for (int i = 0; i < n; i++) { System.out.print("a[" + i + "] : "); for (int j = 0; j < a[i]; j++) System.out.print('*'); System.out.println(); } } }

    • ベストアンサー
    • Java
  • なんで例外出力されるんですか?

    また恥を忍んで理解の為動かないソースを載せます。 idexの入力値が1だとしてnの入力値が3の話をします このソースを実行させると以下の例外が出力されます java.lang.ArrayIndexOutOfBoundsException この例外の意味は不正なインデックスを使って配列がアクセスされたときに発生する例外と意味です。 ではなんでjava.lang.ArrayIndexOutOfBoundsException出力されるんですか メソッド部分のint[] tmp=new int[a.length-n]; for(int i=idex+n; i<a.length; i++){ tmp[i]=a[i]; } return tmp; } はtmpは配列aの長さ分-nですから配列2番目まで入ることはわかっています で次のカウントアップさせる変数int宣言して i=idex+n;を i<a.length; i++をしていますからidexが1でnが3だったら4で4<6になるんじゃないんですか? import java.util.Scanner; public class Ensyuu725 { /** * @param args */ public static void main(String[] args) { Scanner sc=new Scanner(System.in); int []a=new int[]{1,3,4,7,9,11}; for(int i=0; i<a.length; i++){ System.out.println("配列aの要素は"+"a["+i+"]"+a[i]); } System.out.print("削除する a[idx]:"); int idex=sc.nextInt(); System.out.print("a[idex]から何個削除しますか?"); int n=sc.nextInt(); int k[]=arrayRmvOfn(a,idex,n); for(int i=0; i<k.length; i++){ System.out.println("配列aが消された後の要素は"+"k["+i+"]"+k[i]); } } /** * @param a * @param idex * @param n * @return tmp */ private static int[] arrayRmvOfn(int[] a, int idex, int n) { int[] tmp=new int[a.length-n]; for(int i=idex+n; i<a.length; i++){ tmp[i]=a[i]; } return tmp; } } ご指導お願いします。

    • ベストアンサー
    • Java

専門家に質問してみよう