用Louberel方法生成奇数阶幻方

用Louberel方法生成奇数阶幻方

 

/** */ /**
 * 
@author wangliang
 
*/

import  java.awt.Container;
import  java.awt.event.ActionEvent;
import  java.awt.event.ActionListener;
import  javax.swing. * ;
import  java.awt. * ;


public   class  MagicMatrix  extends  JFrame  implements  ActionListener {
    
private JPanel center;
    
private JPanel right;
    
private JLabel label;
    
private JSpinner level;
    
private JButton Louberel;
    
public MagicMatrix(){
        center
=createpanel(3);
        add(center,BorderLayout.CENTER);
        right
=new JPanel();
        label
=new JLabel("选择矩阵阶数");
        level
=new JSpinner(new SpinnerNumberModel(3,3,100,2));
        Louberel
=new JButton("Louberel方法生成");
        Louberel.addActionListener(
this);
        right.add(label,BorderLayout.WEST);
        right.add(level,BorderLayout.CENTER);
        right.add(Louberel,BorderLayout.EAST);
        add(right,BorderLayout.NORTH);
        setTitle(
"magic matrix)");
        setSize(
340,296);
        setVisible(
true);
    }

    
    
public void actionPerformed(ActionEvent e){
        
if(e.getSource()==Louberel){
//            remove(center);
            int levelnumber=((Integer)level.getValue()).intValue();
            center
=createpanel(levelnumber);
            add(center,BorderLayout.CENTER);
            validate();
        }

    }

    
    
/**//*生成魔阵数*/
    
private int[][] createnumber(int n){
        
int magicmatrix[][]=new int[n][n];
        
int i=0;
        
int j=n/2;
        
for(int m=1;m<=n*n;m++){
            magicmatrix[i][j]
=m;
            
int p=(i-1+n)%n;
            
int q=(j+1+n)%n;
            
if(magicmatrix[p][q]==0){
                i
=p;
                j
=q;
            }

            
else i=(i+1)%n;
        }

        
for(int p=0;p<n;p++){
            
for(int q=0;q<n;q++){
                System.out.print(magicmatrix[p][q]
+" ");
            }

            System.out.println();
        }


        
return magicmatrix;
        
    }

    
    
/**//*生成相应的面板*/
    
private JPanel createpanel(int n){
        
int matrix[][]=createnumber(n);
        JPanel tempJPanel
=new JPanel();
        tempJPanel.setLayout(
new GridLayout(n,n));
        JLabel jlabel[][]
=new JLabel[n][n];
        
for(int i=0;i<n;i++){
            
for(int j=0;j<n;j++){
                jlabel[i][j]
=new JLabel(""+matrix[i][j],JLabel.CENTER);
                tempJPanel.add(jlabel[i][j]);
            }

        }

        
return tempJPanel;
    }

    
    
public static void main(String args[]){
        MagicMatrix application
=new MagicMatrix();
        application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }


}

 

你可能感兴趣的:(用Louberel方法生成奇数阶幻方)