第11講 配列を関数に送る 
第4話 関数に2次元配列を送るの演習解答

 入門  Java

(実際には1列)
解答コード例
class t{
  public static void main(String args[]){
    int[][] x=new int[4][4];
    int[][] y=new int[4][4];
    int i,j;
    for(i=0;i<4;i++){
      for(j=0;j<4;j++){
        x[i][j]=(int)(Math.random()*100);
      }
    }
    System.out.println("配列xのデータ");
    for(i=0;i<4;i++){
      for(j=0;j<4;j++){
        if(x[i][j]<10){
          System.out.print (" ");
          System.out.print(x[i][j]);
          System.out.print (" ");
        }
        if(x[i][j]>=10 && x[i][j]<100){
          System.out.print (" ");
          System.out.print(x[i][j]);
          System.out.print (" ");
        }
        if(x[i][j]>=100 && x[i][j]<1000){
          System.out.print(x[i][j]);
          System.out.print (" ");
        }
      }
      System.out.println();
    }
    g(x,y);
    System.out.println("配列xを配列yにコピー");
    for(i=0;i<4;i++){
      for(j=0;j<4;j++){
        if(y[i][j]<10){
          System.out.print (" ");
          System.out.print(y[i][j]);
          System.out.print (" ");
        }
        if(y[i][j]>=10 && y[i][j]<100){
          System.out.print (" ");
          System.out.print(y[i][j]);
          System.out.print (" ");
        }
        if(y[i][j]>=100 && y[i][j]<1000){
          System.out.print(y[i][j]);
          System.out.print (" ");
        }
      }
      System.out.println();
    }
    f(x);
    System.out.println("配列xのデータを2倍");
    for(i=0;i<4;i++){
      for(j=0;j<4;j++){
        if(x[i][j]<10){
          System.out.print (" ");
          System.out.print(x[i][j]);
          System.out.print (" ");
        }
        if(x[i][j]>=10 && x[i][j]<100){
          System.out.print (" ");
          System.out.print(x[i][j]);
          System.out.print (" ");
        }
        if(x[i][j]>=100 && x[i][j]<1000){
          System.out.print(x[i][j]);
          System.out.print (" ");
        }
      }
      System.out.println();
    }
    h(x,y);
    System.out.println("配列xのデータ復元");
    for(i=0;i<4;i++){
      for(j=0;j<4;j++){
        if(x[i][j]<10){
          System.out.print (" ");
          System.out.print(x[i][j]);
          System.out.print (" ");
        }
        if(x[i][j]>=10 && x[i][j]<100){
          System.out.print (" ");
          System.out.print(x[i][j]);
          System.out.print (" ");
        }
        if(x[i][j]>=100 && x[i][j]<1000){
          System.out.print(x[i][j]);
          System.out.print (" ");
        }
      }
      System.out.println();
    }
    i(x);
    System.out.println("配列xの転置");
    for(i=0;i<4;i++){
      for(j=0;j<4;j++){
        if(x[i][j]<10){
          System.out.print (" ");
          System.out.print(x[i][j]);
          System.out.print (" ");
        }
        if(x[i][j]>=10 && x[i][j]<100){
          System.out.print (" ");
          System.out.print(x[i][j]);
          System.out.print (" ");
        }
        if(x[i][j]>=100 && x[i][j]<1000){
          System.out.print(x[i][j]);
          System.out.print (" ");
        }
      }
      System.out.println();
    }
    h(x,y);
    System.out.println("配列xのデータ復元");
    for(i=0;i<4;i++){
      for(j=0;j<4;j++){
        if(x[i][j]<10){
          System.out.print (" ");
          System.out.print(x[i][j]);
          System.out.print (" ");
        }
        if(x[i][j]>=10 && x[i][j]<100){
          System.out.print (" ");
          System.out.print(x[i][j]);
          System.out.print (" ");
        }
        if(x[i][j]>=100 && x[i][j]<1000){
          System.out.print(x[i][j]);
          System.out.print (" ");
        }
      }
      System.out.println();
    }
    j(x);
    System.out.println("配列xの左右対称移動");
    for(i=0;i<4;i++){
      for(j=0;j<4;j++){
        if(x[i][j]<10){
          System.out.print (" ");
          System.out.print(x[i][j]);
          System.out.print (" ");
        }
        if(x[i][j]>=10 && x[i][j]<100){
          System.out.print (" ");
          System.out.print(x[i][j]);
          System.out.print (" ");
        }
        if(x[i][j]>=100 && x[i][j]<1000){
          System.out.print(x[i][j]);
          System.out.print (" ");
        }
      }
      System.out.println();
    }
    h(x,y);
    System.out.println("配列xのデータ復元");
    for(i=0;i<4;i++){
      for(j=0;j<4;j++){
        if(x[i][j]<10){
          System.out.print (" ");
          System.out.print(x[i][j]);
          System.out.print (" ");
        }
        if(x[i][j]>=10 && x[i][j]<100){
          System.out.print (" ");
          System.out.print(x[i][j]);
          System.out.print (" ");
        }
        if(x[i][j]>=100 && x[i][j]<1000){
          System.out.print(x[i][j]);
          System.out.print (" ");
        }
      }
      System.out.println();
    }
    k(x);
    System.out.println("配列xの上下対称移動");
    for(i=0;i<4;i++){
      for(j=0;j<4;j++){
        if(x[i][j]<10){
          System.out.print (" ");
          System.out.print(x[i][j]);
          System.out.print (" ");
        }
        if(x[i][j]>=10 && x[i][j]<100){
          System.out.print (" ");
          System.out.print(x[i][j]);
          System.out.print (" ");
        }
        if(x[i][j]>=100 && x[i][j]<1000){
          System.out.print(x[i][j]);
          System.out.print (" ");
        }
      }
      System.out.println();
    }
        h(x,y);
    System.out.println("配列xのデータ復元");
    for(i=0;i<4;i++){
      for(j=0;j<4;j++){
        if(x[i][j]<10){
          System.out.print (" ");
          System.out.print(x[i][j]);
          System.out.print (" ");
        }
        if(x[i][j]>=10 && x[i][j]<100){
          System.out.print (" ");
          System.out.print(x[i][j]);
          System.out.print (" ");
        }
        if(x[i][j]>=100 && x[i][j]<1000){
          System.out.print(x[i][j]);
          System.out.print (" ");
        }
      }
      System.out.println();
    }
    l(x);
    System.out.println("配列xの逆転置");
    for(i=0;i<4;i++){
      for(j=0;j<4;j++){
        if(x[i][j]<10){
          System.out.print (" ");
          System.out.print(x[i][j]);
          System.out.print (" ");
        }
        if(x[i][j]>=10 && x[i][j]<100){
          System.out.print (" ");
          System.out.print(x[i][j]);
          System.out.print (" ");
        }
        if(x[i][j]>=100 && x[i][j]<1000){
          System.out.print(x[i][j]);
          System.out.print (" ");
        }
      }
      System.out.println();
    }
  }
  public static void f(int x[][]){
    int i,j;
    for(i=0;i<4;i++){
      for(j=0;j<4;j++){
        x[i][j]*=2;
      }
    }
  }
  public static void g(int x[][],int y[][]){
    int i,j;
    for(i=0;i<4;i++){
      for(j=0;j<4;j++){
        y[i][j]=x[i][j];
      }
    }
  }
  public static void h(int x[][],int y[][]){
    int i,j;
    for(i=0;i<4;i++){
      for(j=0;j<4;j++){
        x[i][j]=y[i][j];
      }
    }
  }
  public static void i(int x[][]){
    int i,j;
    int[][] w=new int[4][4];
    for(i=0;i<4;i++){
      for(j=0;j<4;j++){
        w[i][j]=x[j][i];
      }
    }
    for(i=0;i<4;i++){
      for(j=0;j<4;j++){
        x[i][j]=w[i][j];
      }
    }
  }
  public static void j(int x[][]){
    int i,j;
    int[][] w=new int[4][4];
    for(i=0;i<4;i++){
      for(j=0;j<4;j++){
        w[i][j]=x[i][3-j];
      }
    }
    for(i=0;i<4;i++){
      for(j=0;j<4;j++){
        x[i][j]=w[i][j];
      }
    }
  }
  public static void k(int x[][]){
    int i,j;
    int[][] w=new int[4][4];
    for(i=0;i<4;i++){
      for(j=0;j<4;j++){
        w[i][j]=x[3-i][j];
      }
    }
    for(i=0;i<4;i++){
      for(j=0;j<4;j++){
        x[i][j]=w[i][j];
      }
    }
  }
  public static void l(int x[][]){
    int i,j;
    int[][] w=new int[4][4];
    for(i=0;i<4;i++){
      for(j=0;j<4;j++){
        w[i][j]=x[3-j][3-i];
      }
    }
    for(i=0;i<4;i++){
      for(j=0;j<4;j++){
        x[i][j]=w[i][j];
      }
    }
  }
}


次の課題です。
今のコードはいちいち復元してから転置や対称移動していますが、
復元しないで転置→左右対称移動→上下対称移動→逆転置としていくとどうなるでしょうか。







第3話へ 第5話へ

戻る

VB講義へ
VB講義基礎へ
vc++講義へ第1部へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座

初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第1部
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第2部
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第3部