• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ダブルループ )

ダブルループを使った正方形の中に小さい正方形を作るプログラムの作り方

このQ&Aのポイント
  • 質問者は、ダブルループを使用して正方形の中に小さい正方形を何重にも作るプログラムを作りたいと考えています。
  • 現在のプログラムでは、綺麗な正方形の中に正方形の図が描かれないため、改善方法を求めています。
  • どのようにすれば正方形の中に正方形を綺麗に描くことができるのでしょうか?

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

  • ベストアンサー
回答No.1

drawRect(int x,int y,int width,int height)の1つ目と2つ目の引数はそれぞれx,y座標を示しています。あなたが書いているコードの p.drawRect(65*(i+2),65*(t+2),60,60); p.drawRect(65*(i+2),65*(t+2),50,50); p.drawRect(65*(i+2),65*(t+2),40,40); を見ると、3つともx,y座標が同じ点を指しています。これがうまくいかない原因です。正方形の中に正方形を書くときは3つともx,y座標が変わるので for(int t=0;t<5;t++){ for(int i=0;i<4;i++){ g.drawRect(65*(i+2),65*(t+2),60,60); } } for(int t=0;t<5;t++){ for(int i=0;i<4;i++){ g.drawRect(65*(i+2)+5,65*(t+2)+5,50,50); } } for(int t=0;t<5;t++){ for(int i=0;i<4;i++){ g.drawRect(65*(i+2)+10,65*(t+2)+10,40,40); } } または、この3つを1つにまとめた for(int t=0;t<5;t++){ for(int i=0;i<4;i++){ for(int j=0;j<7;j++) //せっかくなので増やしてみました { g.drawRect(65*(i+2)+5*j,65*(t+2)+5*j,60-10*j,60-10*j); } } } とすればいいでしょう。

cool12
質問者

お礼

解答ありがとうございました 助かりました(´`;)

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • プログラムのループの周期を設定する方法

    C/C++でプログラムを作成していますが,(MicroSoft Visualstadio C++6.0)で int main() { time[1000]; clock_t t1,t2; t2 = 0; for(int i = 0;i < 1000;i++) { . . Sleep(10) t1 = clock(); time[i] = t1-t2; t2 = clock(); } //エクセルでtime[]を書き出す } としてfor分の中のループ1回分の周期を10msにしようとしているのですが,time[]をエクセルで書き出すと15msになってしまいます. ループ1回分を一定の時間で処理させるにはどうしたらよいのでしょうか. ループ1回分の周期は50ms以下で実行できれば問題ありません.また誤差1ms未満であれば問題ありません(できればあまり大きくないほうがよい).上のプログラムではSleepを使ってますが別にこだわっている訳ではなくほかに方法が分からなかっただけです.できれば簡単なプログラムのようなものを付けて,分かる方はどうか教えてください.

  • 二重ループのあるプログラム(C言語)

    #include <stdio.h> int main(void) { int i, j, c, c2; c = 0; for(i = 100; i < 1000; i++) { c2 = 0; for(j = 1; j <= i; j++) { if (i % j == 0) c2++; } if (c2 % 2 == 1) c++; } printf("%d個です。\n", c); return 0; } というプログラムがあるのですが、2重ループ部分のそれぞれのループに対応して、 2つの関数として独立させるとどのようになりますか? また、2つの関数のいずれにおいても、ループを用いずに再帰呼び出しを用いるとどうなりますか?

  • 10進ベーシックでループを抜けたい

    for文で作った2重ループの中にif文があります。 if文の条件を満たしたらループを抜けるようにしたいのですが、 「goto 行番号」や「EXIT FOR」 を使ってもうまくいきません。 一度に2重ループを抜けたいのですが、どうすればいいでしょうか?

  • 3次元配列のループによる比較の回数を減らす

    以下は正の整数が入った3次元配列form[30][20][8]で、中身が一致している2カ所に-1を代入してループを抜けるというプログラムの一部分なんですが、無駄なループを減らすにはどういった変更をすればいいでしょうか? form[30][20][8]は変更しない方向でお願いします。 check: for(int i=0;i<30;i++){ for(int j=0;j<20;j++){ for(int k=0;k<8;k++){ for(int l=0;l<30;l++){ for(int m=0;m<20;m++){ for(int n=0;n<8;n++){ if(form[i][j][k]==form[l][m][n]&&!(i==l&&j==m&&k==n)form[i][j][k]!=-1) count++; form[i][j][k]=-1; form[l][m][n]=-1; break check; } } } } } } }

    • ベストアンサー
    • Java
  • 永久ループ・・・

    どうも、最近C言語の勉強を始めた超初心者です。 int main(void) { int i; for(;;){ printf("桁数を入力してください。:"); scanf("%d",&i); if(i<=12) break; else puts("もう一度入力してください。"); continue; } return(0); } 上のソース、i<=12の条件を満たさなければループを繰り返すというプログラムなんですけど、数値を入力した場合は思った通りに挙動するのですが、文字や文字列を入力すると永久ループになります。scanf関数で返値を受け取って判定するなどいろいろ試したのですが、どうしても永久ループになってしまいます。 どうしてか教えてください。お願いします。

  • forループ

    #include<stdio.h> int main(int argc, char** argv) { int i; printf("正の整数を入力してください。\n"); scanf("%d",&i); for(;i;i--) { printf("%d\n",i); } return 0; } このプログラムの判定部がiだけなのがわかりません。どうしてこれで1までのカウントダウンがとまるのでしょうか。

  • 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
  • for 3ループについて教えて

    for 3ループについて教えて * ** *** **** * ** *** **** * ** *** **** と表示させたいのですが、 #include<stdio.h> int main(void) { int i,j,k; for(i=1; i<=4; i++) { for(j=1; j<=i; j++){ // for(k=1; k<=3; k+=i){ } printf("*"); } printf("\n"); } return 0; } * ** *** **** このように表示されてしまいます。//の所が違うなと思います。が、分かりそうで分かりません。 もし、分かるかたがいましたら、教えてください。 よろしくおねがいします。

  • 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); の様なループです。 試験範囲は大方勉強出来てるんですが まぬけな事にループがイマイチ理解出来てなくて(恥) 皆さんはどうやって慣れてこられましたか? つまらない質問ですが何か良いコツやアドバイスがあれば よろしくお願いします。

  • ループの回数の問題についてです。

    SUN教科書 javaアソシエイツP102についてです。 Helloが何回表示されるかという問題です。 i=1 j=1の時、continue文によりouterへ移動するという 所までは理解出来ます。 分からないのはその後、解説によるとiが2ということです。 そして内側のforループは0から2の間、実行されるというのです。 iが2になるなら、内ループに入った時jも 2になるのではないのでしょうか。 よろしくお願い致します。 class LoopSample{ public static void main(String[] args){ outer: for(int i=0; i<5; i++){ for(int j=0; j<3; j++){ if(i==1 && j==1){ continue outer; } System.out.println("Hello"); } if(i==1 || i==2){ break; } } } }

    • ベストアンサー
    • Java
このQ&Aのポイント
  • LIFEBOOK AH45/H1の新規セットアップ中にインターネット接続で問題が発生しています。
  • ネットワークを選択しても先に進まず、富士通サポートに連絡できず困っています。
  • 電源を切ることもできず、対処法がわかりません。助けてください。
回答を見る