• ベストアンサー

for分等を使用したインクリメント演算

nao-yの回答

  • nao-y
  • ベストアンサー率58% (111/190)
回答No.8

> 読み込んだバッファ⇒BufferReader? > 行数取得メソッド⇒? > はなにを記述すればよいのでしょうか? ああ、すみません、BufferReaderクラスにファイル行数取得メソッドが あるものと勘違いしていました。申し訳ありません。 ループの記述は、既に書かれている通りの while( (line=buf.readLine()) != null ) が最適だと訂正いたします。 > アドバイスいただいた構文をソース > for (i = 1; i <= 行数; i++) > out.println(i+","+セキュリティコード[i]+","+シリアル番号[i]); > を加えたとして > > サンプル(少し変えてます)にあるような > セキュリティーコード(tmp[0], out); > out.print(","); > > シリアル番号(tmp[1out); > out.println(","); > 出力データに対して用意してある > 各メソッドのソースは > > void セキュリティーコード(String セキュリティーコード(, PrintWriter out) { > out.print(セキュリティーコード); > void シリアル番号(String シリアル番号(, PrintWriter out) { > out.print(シリアル番号); > どうすればよいのでしょうか?? おっしゃる通りにコーディングされればよいかと思います。 ですが、 out.println(i+","+セキュリティコード[i]+","+シリアル番号[i]); と1行で済むところを、そんなにたくさんの行数を使って書く メリットがわかりません。 なお、補足説明しますと for (i = 1; i <= 行数; i++) out.println(i+","+セキュリティコード[i]+","+シリアル番号[i]); は、以下の手順でセキュリティコード・シリアル番号を取得している という前提です。 また、セキュリティコード[]、シリアル番号[]はString型の配列変数とします。 入力ファイルの1レコードは「セキュリティコード,シリアル番号」 と記述されているものとする 0. i=0; 1.ファイルからレコードを1行読み出して、それがnullでない限り以下の  処理を繰り返す。  1-1. i++;  1-2. 読み出したレコードのカンマ(",")より前を、セキュリティコード[i]にセットする  1-3. 読み出したレコードのカンマ(",")より後を、シリアル番号[i]にセットする 2. 行数=i; ですが、既に書かれているようなコード(以下の手順)になされば、 セキュリティコード[]、シリアル番号[]を準備する必要はありませんし、 最大行数を求める必要もありませんね。 0. i=0; 1.ファイルからレコードを1行読み出して、それがnullでない限り以下の  処理を繰り返す。  1-1. i++;  1-2. 出力ファイルに(i+","+読み出したレコード)と出力する。

ITJack
質問者

お礼

因みに エクセルでいうAセルBセルの配列が 700セルの場合もございます。 println(i+","+読み出したレコード)で よりは セキュリティーコード(tmp[0], out); out.print(","); といった書き方にi++を加えて なおかつ 宣言した配列を 各メッソドvoidから管理したいのです。

ITJack
質問者

補足

ていねいなご説明ありがとうございます。 >out.println(i+","+セキュリティコード[i]+","+シリアル番号[i]); と1行で済むところを、そんなにたくさんの行数を使って書く メリットがわかりません。 これはサンプルとして考えて提示したもので 細かく説明してませんが仕様によってはエクセルでいうAセルBセルが50セルぐらいになる場合も あるので1行にするのは非常に厳しいし分かりにくくなると思います。 >ですが、既に書かれているようなコード(以下の手順)になされば、 セキュリティコード[]、シリアル番号[]を準備する必要はありませんし、 最大行数を求める必要もありませんね。 それとこちらも細かく説明しておりませんでしたが エクセルでいうAセルBセルのデータに対して 各メソッドvoidから セルごとの開発環境が必要になってくるのです。 例えば各メソッドの数値を全角にプログラムを組んだりだとか。 ですので個々に Stringで宣言した配列(セル)に対して 書きだすための void セキュリティコード[0],out out.print();が必要になってくると思うのですが アドバイス頂いた 0. i=0; 1.ファイルからレコードを1行読み出して、それがnullでない限り以下の  処理を繰り返す。  1-1. i++;  1-2. 出力ファイルに(i+","+読み出したレコード)と出力する。 に変更した場合の void セキュリティコード[0],out out.print();をどう設定すればいいのか分からないので エラーが出まくりになってます。

関連するQ&A

  • forループの中での初期化

    class Foo{   public static void main(String args[]){     int x=10;     for(int i=0;i<5;i++){       System.out.print(x+i);     }     System.out.print("\n"+i);   } } このプログラムはコンパイルエラーが出ます。 iがforループの中で宣言されていてその外では無効だからです。 そこで class Foo{   public static void main(String args[]){     int x=10;     int i;     for(i=0;i<5;i++){       System.out.print(x+i);     }     System.out.print("\n i="+i);   } } のようにしてみました。 i=5と出ました。 ふと、iは確かに宣言されているけど、初期化はforの中でしかされていないのになぜコンパイルエラーにならなかったんだろう??、と思ってしまいました。 おかしくないでしょうか?

    • ベストアンサー
    • Java
  • java for文、if文を使っての三角形

    例:1 23 456 78910 ・・・・・・のようにひょうじさせるプログラムを作成するのに、for文とIf文を使っての三角形を   作成したいのですが、If文の条件式が分からないのとどうしたら、上記のようなプログラムが   出来るのか教えてください。お願いします。 public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ // 行に表示させる個数を表現するための変数がないため今回、新たに変数を用意する。 int a = 1; //行の終わりを改行して1増やすための変数がないため今回、新たに変数を用意する。 int b = 1; // 1~100までの数字を用意する。 for (int i = 1; i <= 100; i++) { //変数iをSystem.out.printを使って変数iをコンソールの中に出力させる。 System.out.print(i); //System.out.println("")を使って改行する。 System.out.println(" "); //変数iに1増加して数字を順番にする。 i++; if(a <= i){ System.out.print(a);

  • forループに慣れるには

    初めまして。 今資格を取ろうと思い独学でJavaを勉強してるんですが、 つまらない部分でつまずいています。 それは少々複雑なfor等のループです。 変数を追っていくうちにこんがらがってしまい、 変数の正しい値を見失ってしまいます。 例えば… Loop: for(int i = 0; i<5; i++) { for(int j =0; j<5; j++) { if(i==j) continue Loop; System.out.println("i = " +i+ "j = " +j); if(i > 3) break Loop; } } や、 int i,j; for(i = 0, j = 0; i<3;) { if(i++ == 2 || j++ == 2) break; } System.out.println(i); System.out.println(j); の様なループです。 試験範囲は大方勉強出来てるんですが まぬけな事にループがイマイチ理解出来てなくて(恥) 皆さんはどうやって慣れてこられましたか? つまらない質問ですが何か良いコツやアドバイスがあれば よろしくお願いします。

  • Java for文 だけで逆ピラミッドを作る

    教えてください。 for 文だけで逆ピラミッドを作りたいのですが、*の数が2個ずつ減ればピラミッド 作成なのですが、私の文だと*は1個ずつしか減りません。 2個の指定はどのうように記述すればよいでしょうか? *を3と指定した場合 ***** (5) -***   (3) --*     (1) と表示したいのですが、下の文だと ***** (5) -****  (4) --***   (3) となってしまいます。 import java.io.*; class Sample4 { public static void main(String [] args) throws IOException { System.out.println("いくつ*を入力しますか?"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int num = Integer.parseInt(str); int j =0; int i =0; int s =0; //行数制御 for(i=0; i<num; i++) { for(s=0; s<i; s++) { System.out.print("-"); } for(j=num*2-1; j>i; j--) { System.out.print("*"); //System.out.print("d"); } //改行タグ System.out.print("\n"); } } }

  • JAVAのfor文で困っています。

    JAVAの勉強をしていますが、本の練習問題でわからなくて困っています。for文で以下の処理を行いたいです(do,whileはなしです)が、 *を5個ごとに改行したいのですが、改行してくれません。 問題の部分↓ if (n % 5 == 0) System.out.println(); 何か良い方法はありませんか?お願いします。 ------------------------------------------------- //(数を読み込んで)だ個数だけ * を5個ごと改行しながら表示 int n = 0; for (int i = n; n <= 0;){ System.out.print("何個*を表示しますか : "); n = stdIn.nextInt(); } for (int i = 1; i <= n; i++){ System.out.print("*"); if (n % 5 == 0) System.out.println(); } ------------------------------------------------

    • ベストアンサー
    • Java
  • ご教示ください。

    ご教示ください。 javaのfor文を用いたループ処理についてです。 for( int i = 0; i < 10; i++){ System.out.print( i ); if ( i == 3){ break; } 結果 0123 ----------------------------------------------- for( int i = 0; i < 10; i++){ if ( i == 3){ break; } System.out.print( i ); 結果 012 後者の、012になる結果はわかります。 breakをすることで、3以降のループ処理から離脱するということは理解できるのですが、前者が理解できません。 0123 なぜ、3が表示されているのでしょうか。 よろしくお願いいたします。

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

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

    • ベストアンサー
    • Java
  • for文について

    for文を使って、以下のような図形を作成してますが、 どうしてもうまく作れません。 どなたか教えていただけないでしょうか? 現在出来ているソースは次のようです。 まるで異なる図形になってしまいますが。 public class kurikaeshi { public static void main(String[] args) { int i = 0, j = 0, k = 0, l=0; for(i = 0; i < 10; i++) { for(j = 0; j < i + 1; j++) { for(k = 0; k < 2*j; k++) { System.out.print(" "); } for(l = 0; l < (2*i + 1) - 2*k; l++) { System.out.print("*"); } System.out.println(); } } } } + +++ + +++++ +++ + +++++++ +++++ +++ + +++++++++ +++++++ +++++ +++ + +++++++++++ +++++++++ +++++++ +++++ +++ +

  • java ネストしたfor文について

    ***** **** *** ** * 上のように*が減るようにしたいのですが下のソースではどこが悪いか教えてください class TestGoo{ public static void main(String args[]){ for(int i = 5; i>=1; i--){ for(int j = 5;j>=1; j--){ System.out.print('*'); } System.out.println(); } } }

  • 多分インクリメントがよく解ってないのかも

    #include <iostream> using namespace std; int main() { int s = 1; for(int i=0; i<5; i++){ for(int k=0; k<s; k++){ cout << '*'; } cout << '\n'; s++; } return 0; } をコンパイラすると、 * ** *** **** ***** の様に出力されます。 この二つの**マークの所から、なぜ、そうなるのかが理解できません。 for(int k=0; k<s; k++){ の k<s;の所は最初、0<1;となって。*が一つ出力され、k++でkが1になり'\n'で改行され、 s++でsが2になり、1<2;となり出力の2行目に*が一つでます。でも1<2なので、\nになってしまいます。 しかし、この考え方は間違っているので、理解できないのです。 要点は**がどの様な手順で出力されているのかが解りません。 **が理解できれば***や、****も理解できると思います。 for(int k=0; k<s; k++){ cout << '*'; } のk++のインクリメントは{ }のブロック内の最後の地点で、1プラスになるのですよね?