• 締切済み

プログラムの内容

public class Graph1 public static void main(String[] args){ for(int i=0;i<10;i++){ for(int j=0;j<i*i;j++){ System.out.print("*"); } Syatem.out.println(""); } } } これは放物線をグラフを描写するプログラムなのですがforが二回使われているところがわかりません。丁寧にこの箇所を解説してもらえる方お願いします。i=0から具体的にお願いします。

みんなの回答

  • samzee
  • ベストアンサー率0% (0/2)
回答No.4

>例えばi=0のとき、外側のfor文の条件に適しているので内側のfor文に移行し、j=0の値に対し0*0(=0)の値とイコールになるので*は表示されずJ++でj=1になる。 ここまでは正しいです。 >そしてj<i*iで評価されるが今i*iは0なのでこの条件に適さない。 j=1のときには評価は行われないです。j=0のときに評価式を満たさないので、そのままfor文を抜けます。 >よって内側のfor文を抜けて外側のfor文に再び戻ってi++でi=1となりi<10に適しているので内側のfor文へ。j=1とi*i=1との比較になるがj<i*iに適さないので*は表示されない。。。 ここが間違いです。一度内側のfor文は抜けているので、再度このfor文に入るときにはjには、まず、0が代入されます。j=0,i*i=1なのでj<i*iを満たすので*を表示します。つぎに、j++でjが1になり評価式を満たさなくなるので、内側のfor文を抜けます。 >*が表示される個数は条件式j<i*iに由来しているのでしょうか。 *の表示数はi*iの計算結果になります。 for文を抜けた後も、jの値が保存されていると考えていたのがプログラムの間違った理解につながっていたようですね^^;

solution64
質問者

お礼

やっとわかりました!指摘どうりの勘違いをしていました。。 ありがとうございました。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

これは Visual Basic では文法がまったく正しくありません。 エラーになります ...って話じゃないですよね?

solution64
質問者

お礼

ごめんなさい。投稿する場所を間違えてしまいました。Javaのカテゴリーに投稿するべきでした。。。

  • samzee
  • ベストアンサー率0% (0/2)
回答No.2

>for(int i=0;i<10;i++){ > for(int j=0;j<i*i;j++){ > System.out.print("*"); > } > Syatem.out.println(""); > } このプログラムを実行すると * **** ********* **************** ・ ・ ・ * × 81 というような放物線の半分が描画されます まず、始めのfor文でi<10とあります。このfor文の最後のprintln("")では単に改行が行われます。つまり、改行は10回行われます。 二つ目のfor文ではj<i*iとあるので、 例えばiが0のときは*を0個描画、その後に先ほどの説明の改行が入ります。つまり、単に改行されるだけですね。 例えばiが3のときはj=0、1、2、3…9が順に代入されていき(3x3=9なので)、最後に改行が入ります。 これをi=0から9まで順におこなっていくので放物線を描画できます。

solution64
質問者

お礼

ご回答ありがとうございます。私の勉強不足でsamzeeさんの考えを理解することができません。。私の考えを以下に述べます。以下の説明で改行される仮定は省きます。 例えばi=0のとき、外側のfor文の条件に適しているので内側のfor文に移行し、j=0の値に対し0*0(=0)の値とイコールになるので*は表示されずJ++でj=1になる。そしてj<i*iで評価されるが今i*iは0なのでこの条件に適さない。よって内側のfor文を抜けて外側のfor文に再び戻ってi++でi=1となりi<10に適しているので内側のfor文へ。j=1とi*i=1との比較になるがj<i*iに適さないので*は表示されない。。。 このように私は考えてしまってるのでいつまでたっても*が表示されないことになってしまいます。また、*が表示される個数は条件式j<i*iに由来しているのでしょうか。

  • yomyom01
  • ベストアンサー率12% (197/1596)
回答No.1

 これはy=x^2のグラフを書くプログラムです  x=0,1,2,3,4,5,6,7,8,9のとき、それぞれ  y=0,1,4,9,16,25,36,49,64,81個の*が表示されます。

関連するQ&A

  • javaのプログラムについて

    java始めたばかりの者です。 class sample1 { public static void main(String[] args) { for(int i=1; i<=5; i++){ for(int j=0; j<i; j++){ System.out.println("*"); } System.out.println("\n"); } } } これを実行すると * * * * * * * * * * * * * * * こうなってしまい * ** *** **** ***** このようにするにはどうしたらいいのでしょうか??

    • ベストアンサー
    • Java
  • 昇進者です。 戻り値の学習をしていますが。

    *を10個表示するプログラムですが。 public class Graph1 { public static void main(String[] args) { printGraph(10); } public static void PrintGraph(int x) for(int i = 0; i < x; i++){ System.out.println("*"); } System.out.println(""); } } のprintGraph(10);は何のためにあるのですか? 10がxに代入されていますよね。戻り値はxですか。

  • Javaの初歩的なプログラムについて

    public class ForInFor{ public static void main(String[] args){ for(int i=1; i<=9; i++){ String a = ""; for(int j=1; j<=9; j++){ a += i * j + " "; } System.out.println(a); } } } を実行すると九九の表のようになりました。 println(a)の中のaはjの方のforの繰り返しが終わったら代入するものだと思っていましたので 戸惑っています。 実際にはどういう流れで九九の表ができるのでしょうか?

  • 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(); } } }

  • プログラムを読む

    public class ShowMaxData { public static void main(String[] args){ int[] data = {31, 41, 59, 26, 53, 58, 97, 93,23, 84} int max_data = data[0] for(int = 0 ; i<data.length ; i++){ if(max_data <data[i]){ max_data = data[i] } } System.out.println("最大値は"+max_data+"です。") } } これは最大値を求めるプログラムですがこの内容の中で質問があります。 for文はi=10になって初めてfor文を抜けてSystem.out.printlnが実行されるのですよね? 分かる方宜しくお願いします。

  • javaの問題

    import java.util.Scanner; class test6{ static void printArray(int[] a) { for(int i=0;i<a.length;i++) System.out.print(String.format("%1$6s", (a[i]+" "))); System.out.println(); } static void printArray(int[][] a) { for(int[] i:a) { for(int j:i) System.out.print(String.format("%1$6s",(j+"\t"))); System.out.println(); } } public static void main(String[] args) { int[] a = {12,536,-8,7}; int[][] c = {{32,-1,32,45,67}, {535,99999,2}, {2,5,-123,9}}; printArray(a); printArray(c); } } このプログラムを表示するとこのようになるのですが、 12 536 -8 7 32 -1 32 45 67 535 99999 2 2 5 -123 9 これに一工夫加えて見やすくしたいです。 このような形にするのはどのようにすればよいのでしょうか + + | 32 -1 45 67 | | 535 99999 2 | | 2 5 -123 9 | + +

  • Javaについて教えてください。

    Javaのソースコードで以下のコードを実行すると表示されないのですがなぜでしょうか? public class Sample{ public static void main(String[] args){ for (int i = 0 ; i >= 5; i++){ System.out.println(i); } } }

  • 配列を使った・・・。

    配列を使って簡単な迷路を作っているのですが、なかなかうまくいきません。 0を" "1を"■"を表示させたいのですがうまくいきません。 何処を直せばいいのか教えてください。 public class Sample1 { public static void main (String[]args) { int [][] data = { {1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1}, {1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,1,0,1,1,1}, {1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,1,0,1,1,1}, {1,1,1,1,1,1,1,1,0,1,0,1,0,1,1,0,0,1,1,1}, {1,1,1,1,1,0,0,0,0,1,0,1,0,0,0,0,1,1,1,1}, {1,1,1,1,1,0,1,1,0,0,0,1,1,1,1,1,1,1,1,1}, {1,1,1,1,0,0,1,1,0,1,0,1,1,1,0,1,1,1,1,1}, {1,1,1,1,0,1,1,1,1,1,0,1,1,1,0,0,0,1,1,1}, {1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1}, {1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1} }; for (int i=0; i<10; i++) { for (int j=0; j<20; j++) { System.out.print(data [i][j]); } if(data [i][j] = 1){ System.out.println("■"); }else{ System.out.println(" "); } } } }

    • ベストアンサー
    • Java
  • 九九のプログラム

    public class kuku{ public static void main(String[] args){ int[][] hyou=new int[10][10]; System.out.print(" "); int i; int yoko; for(i=1;i<hyou.length;i++){ yoko=(int)(Math.random()*10); hyou[i][0]=yoko; System.out.print(" "+hyou[i][0]); } System.out.println(); int j; int tate; for(j=1;j<hyou[0].length;j++){ tate=(int)(Math.random()*10); masu[0][j]=tate; System.out.println(hyou[0][j]); }}} これを実行すると乱数がダブって表示されてしまうのですが、ダブらないようにし、appletで実行できるようにしたいのですがどのように直したらいいのでしょうか。どなたかアドバイスください。

  • プログラムの合体。

    jump7799_4836さん 2018/7/2103:34:44 public class Test2 { public static int メソッド () { System.out.println("メソッド()が呼ばれました"); return 0; } public static int メソッド (int i) { System.out.println("メソッド(int i)が呼ばれました"); return i; } public static int メソッド (int i, int j) { System.out.println("メソッド(int i, int j)が呼ばれました"); return i; } public static int メソッド (short s) { System.out.println("メソッド(short s)が呼ばれました"); return s; } public static int メソッド (double d) { System.out.println("メソッド(double d)が呼ばれました"); return (int) d; } } public メソッド class Test2 { public メソッド static void main(String[] args) { Test2.メソッド (); Test2.メソッド (1); Test2.メソッド (1,2); Test2.メソッド (1.1); Test2.メソッド ((short) 1); Test2.メソッド ((double)1); } } kouzou@GD348ZZD9:/WORK$ javac Test2.java Test2.java:29: エラー: class、interfaceまたはenumがありません public メソッド class Test2 { ^ Test2.java:30: エラー: <identifier>がありません public メソッド static void main(String[] args) { ^ エラー2個 2つのプログラムが合体することってあるのですか? いつもすみません。 解説のほど、宜しくお願い申し上げます。

    • ベストアンサー
    • Java

専門家に質問してみよう