【プログラム\MyJava\place\ApStart.java】**************************
import java.awt.*;
import javax.swing.*;
public class ApStart extends JApplet{
int[] place={1,2,3,4};
public void init(){
AppletConsole ac=new AppletConsole(this);
ArrayTest2 ar=new ArrayTest2();
int[][] ar2=ar.makeArray(place);
ac.append("\n開始(縦に表示します。)\n");
for(int i=0;i<ar2.length;i++){
ac.append("\n");
for(int j=0;j<ar2[i].length;j++){
ac.append(ar2[i][j]+", ");
}
}
}
}
class AppletConsole{
Container co;
JTextArea jt;
JScrollPane js;
public AppletConsole(JApplet ap){
co = ap.getContentPane();
jt=new JTextArea();
js=new JScrollPane(jt);
co.add(js);
ap.setPreferredSize(new Dimension(800,300));
}
void append(String st){
jt.append(st);
}
}
class ArrayTest2{
int[][] cb;
int row;
int column;
public int[][] arrayInit(int[][] place,int k){
for(int i=0;i<place.length;i++){
for(int j=0;j<place[i].length;j++){
place[i][j]=k;
}
}
return place;
}
public int[][] makeArray(int[] place){
Calc ca=new Calc();
row=place.length;
column=ca.factorial(place.length);
int cr=column;
int k=0;
int it=-1;
cb=new int[row][column];
arrayInit(cb,it); //配列を-1で初期化し、要素がitでなかったら確定済みとしてスキップする。
for(int i=0;i<place.length;i++){
int c=0;int r=0;k=0;
cr=cr/(row-i);
while(c<column){
if(r==row)r=0;
while(cb[r][c]!=it){
r++;
if(r==row)r=0;
}
cb[r][c]=place[i];
c++;k++;
if(k==cr){
r++;
k=0;
}
}
}
return cb;
}
}
class Calc{
public int factorial(int k){
if(k==1)return 1;
return k*factorial(k-1);
}
}