第4回 繰り返し

  
1 再確認しましょう
 
(1)命令文の終わりにセミコロン ; を忘れずに!
 - Javaでは、各命令文の終わりに必ずセミコロンが必要
 - Pythonではセミコロンはつけない
void setup()
{
  int a = 5; println("計算"); keisan(a); //<--セミコロン区切りで横に並べてもOK
}

void keisan(int x)

{
  int b = 5 
//<--5の横にセミコロンがないのでエラー、実行できない
  println("b*x = " + (b*x) );

  for(int i=0;i<10;i++){;
//<--こんなところにセミコロンをつけてはダメ
    for(int j=0;j<20;j++);{ //<--これもダメ
      :
}

  
  
(2)if文の「・・かつ・・」と「・・または・・」
 - Javaでは、ifの「・・かつ・・」 は && 、「・・または・・」 は || を使う
 - Pythonでは、 andor 
 
 - abより大きく、かつ bcより大きい 
      :
  if( a>b && b>c ){
      :
  
 - abより大きく、かつ bcより大きい のダメな例 
      :
  if( a>b>c ){
      :
  
 - xは2の倍数 または 3の倍数 であり、かつ 6の倍数でない 
      :
  if( (x%2==0 || x%3==0) && x%6!=0 ){
      :
  
  
(3)適切にインデントを入れる
 - Pythonではインデントが処理制御で必須だが、
   Javaではインデントの有無は処理系に関係しない
 - しかし、プログラムの処理の構造(ループや条件分岐のブロックなど)を
  見やすくするために、適切なインデントを設定することはとても大切 

 - インデントあり 
      :
  for(i=0;i<100;i++){
    for(j=0;j<10;j++){
 
     if( x>300 ){
        y += 8; z = 0;
      }
      if( x%30==0 ) func(x,y);
    }
  }
      :
  
 - インデントなし 
      :
  for(i=0;i<100;i++){
  for(j=0;j<10;j++){
 
if( x>300 ){
  y += 8; z = 0;
  }
  if( x%30==0 ) func(x,y);
  }
  }
      :
    
  
 
2 繰り返し
  
・以下の水色の節は、教科書(やさしいJava)の内容に沿って説明しています
 - 教科書の大事なところを抜粋して、掲載している
 - 「Lesson 6 の内容(p.147から)
  ページ数は、第6版と第7版で少しずれているかも、でも内容は同じ
 - 教科書も目を通しておくこと
 
 9.9 ***と###
  の書式の部分は、教科書からの解説


 
 6.1 for文(教科書 p.148)
 
・for文のしくみを知る
 - 構文(書き方)は Python と少し異なる

  for( 初期化の処理; 繰り返す条件; 更新処理 ){
    処理1;
    処理2;
     :

  }

  初期化の処理 ・・・ 繰り返しを開始するとき、はじめに実行される
  繰り返す条件 ・・・ この条件が満たされる間、繰り返す
  更新処理・・・繰り返しの1回ごとに行われる

<基本的な使い方>
  int i;
   :
  // i=0,1,2,・・・,8,9 と 10回繰り返す
  for(i=0;i<10;i++){
    
System.out.println(i);
  }

 
// j=5,6,7,8,9,10 と 6回繰り返す
  for(int j=5;j<=10;j++){ // int j=5;のように変数の宣言も同時にできる
    System.out.println(j);
  }

      
<ちょっと変わった使い方>
  // i=3,7,11,15,19 のように 4ずつ増える
  for(int i=3;i<20;i+=4){
    
System.out.println(i);
  }

 
// j=5,4,3,2,1,0 のように 1ずつ減る
  for(int j=5;j>=0;j--){
    System.out.println(j);
  }
 
      
    
 6.2 while文
 
・while文のしくみを知る
 - while文のしくみは基本的に Python と同じだが、書き方が少し異なる
 - また、 Python では whileelse をつけることができるが、Javaでは else は使えない
 
  while( 繰り返す条件 ){
    処理1;
    処理2;
     :
  }
 

  繰り返す条件 ・・・ この条件が満たされる間、繰り返す
 
<基本的な使い方>
  int i = 0; // 初期化を忘れずに
   :
  // i=0,1,2,・・・,8,9 と 10回繰り返す
  while( i<10 ){
    
System.out.println(i);
    i++; // iを1増やす
  }

 
// j=5,6,7,8,9,10 と 6回繰り返す
  int j = 5;
  while( j<=10 ){
    System.out.println(j);
    j++; // jを1増やす
  }

           
<無限ループの例>
   :
  while( true ){ // 条件式を true にすると無限ループになる
    System.out.println(i);
    i++; // iを1増やす
    if( i>1000 ) break; // ループを抜ける
  }
   :

      
    
 6.3 do〜while文
 
・ do〜while文のしくみを知る
 -  while文ループの先頭で条件判断を行うが、do〜while文ループの末尾で条件判断を行う
 -  while文との違いは、必ず1回はループの処理が実行されること
 - Pythondo〜while文 はない(while文で代用できる)
 
  do{
    処理1;
    処理2;
     :
  }while( 繰り返す条件 );
 

  繰り返す条件 ・・・ この条件が満たされる間、繰り返す
  
     
 6.4 文のネスト
 
・for文をネストする
 - 繰り返しの文を入れ子(ネスト)にすることができる
 - for文を使ってネストする場合が多い

<基本的な使い方>
   :
 
// 3行4列の * を表示する
  for(int i=0;i<3;i++){ // i=0,1,2
    for(int j=0;j<4;j++){ // j=0,1,2,3
      System.out.print(" *");
    }
    System.out.println(""); // 改行のみ
  }

   :
   
 実行すると以下のようになる
 
  
     
 6.5 処理の流れの変更
 
・break文のしくみを知る
 - for文など繰り返しのループの中にbreak文があると、そこでループを抜ける
 
<基本的な使い方>
  int max;
   :
  for(int i=0;i<10;i++){
    if( i>max ) break;
// iがmaxより大きければループを抜ける
    System.out.println(i);
  }

   :
   
・ switch文の中でbreak文を使う
 - switch文break文の使い方を工夫すると、便利な処理ができる

・ continue文のしくみを知る
 - for文など繰り返しのループの中にcontinue文があると、そこからループの最後まで処理をスキップする
 
  for(int i=0;i<10;i++){
    処理1;
    if( x==i ) continue;  // xとiが等しいとき、処理2、3、4はスキップされる
    処理2;
    処理3;
    処理4;
  }
 
  
    
3 乱数
   
・Processingで乱数を使う場合
 - Processingでは random( ) 関数を用いる
 - random( a, b ); a以上b未満 の範囲、bは含まないので注意する

 random( 0, 1 );  // 0.0〜1.0未満 の範囲で、実数の乱数を発生させる、 0.0 〜 0.9999999・・・
 random( -10, 25 );  // -10.0〜25.0未満 の範囲で、実数の乱数を発生させる

 1, 2, 3, 4 のどれかを発生させたい場合  x = (int)random(1,5);
 -10.0 〜 +10.0 の範囲で実数乱数を発生させたい場合  x = random(0,20) - 10.0;
 
・ ランダムな位置に○を描き続ける

void setup()
{
  size(400, 400);
  background(255); // 背景を白色にする
}

void draw()
{
  float x = random( 0, 400 ); // 0〜400の乱数を発生させる
  float y = random( 0, 400 );
  fill( 255 ); // 塗りつぶしを白色にする
  ellipse( x, y, 20, 20 );
}


・Javaで乱数を使う場合
 - RandomクラスまたはMathクラスを使用する
  Math.random();  // 0以上 1未満 の範囲で、実数の乱数を発生させる
  
   
 
 演習
 
  演習のページへ