问答题

下面是一个Applet程序,其功能是构造n阶魔方阵,魔方阵是这样一个方阵,它的每一行,每一列和对角线之和均相等,例如三阶魔方阵为: 8 1 6 3 5 7 4 9 2 要求用Applet实现上述魔方阵,窗口中包括提示栏,提示输入0~15之间的奇数:输入框,输入方阵的阶数:按钮,点击则输出魔方阵;画布用于输出结果。请改正程序中的错误(有下划线的语句),使程序能输出正确的结果。 注意:不改动程序的结构,不得增行或删行。程序运行结果如下:    
import java.awt.*; import java.awt.event.*; import java.applet.Applet; import java.lang.Math.*; /* <applet code="ex19_3.class" width=800 height=400 > </applet> */ public class ex19_3 extends Applet implements ActionListener { Panel pane=new Panel(); drawWnd dw; Label 11 = new Label("输入 (0~15的奇数) : "); TextField tf1 = new TextField(5); Button btn = new Button("OK"); int[] [] a=new int[16] [16]; int n=15; public void init(){ pane.setLayout(new FlowLayout(FlowLayout.CENTER,25,5)); pane.add(11); pane.add(tf1); pane.add(btn); pane.addActionListener(this); add("North",pane); dw=new drawWnd(); add("South",dw); } class drawWnd extends Canvas { drawWnd() { setSize(300,300); setBackground(Color.GRAY); } public void paint(Graphics g) { g.setColor(Color. GREEN); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) g.drawString(Integer.toString(a[i] [j]),i*20,j*20); } } public void actionPerformed(ActionEvent ae) { try{ n=Integer.parseInt(tf1.getText()); int i=1,j=1; for(i=1;i<=n;i++) for(j=1;j<=n;j++) a[i] [j]=0; j=n/2+1; a[i] [j]=1; for(int k=1;k<=n*n;k++){ i--; j++; if((i<1)&&(j>n)) { i=i+2; j--; } else{ if(i<1) i=n; if (j>n) j=1; } if (a[i] [j]==0) a[i] [j]=k; else{ i=i+2; j--; a[i] [j]=k; } } dw. repaint ( ); } catch(NumberFormatException nfe){ tf1.setText("error!"); } } } ex19_3.html <HTML> <HEAD> <TITLE>ex19_3</TITLE> </HEAD> <BODY> <applet code="ex19_3.class" width=800 height=400 </applet> </BODY> </HTML>

【参考答案】

btn.addActionListener(this) a[1]][j]=1 int k=2;k<=n*n;k++[解析......

(↓↓↓ 点击下方‘点击查看答案’看完整答案 ↓↓↓)
热门 试题