请大家帮我分析一下
文字 我是新手在学习课本的时候对于以下这个程序的运行不了解,希望大家帮忙: 这是一个输出1-9个数在表格中,同时满足行列对角线和都等于15的程序 1,dataEnd中的return语句返回到什么地方,循环还是方法 执行程序后第二次是 234 567 891 和dataEnd的判定中 987 654 321 中的最后一位都是1,会不会返回true,在方法mb_arrange的for语句中就成了(!true)了,会有什么结果。 2,如果一直以每个数加一的方式循环,那么怎么出现诸如 536 421 879这样的序列 也就是说哪一个语句打破了这些数的序列,而包括所有的数组。
class J_GridBoard15 {int [][]m_board; J_GridBoard15() { m_board=new int[3][3]; } private void mb_outputGridRowBoard() { int i; System.out.print("+"); for(i=0;i<5;i++) System.out.print("-"); System.out.println("+"); } private void mb_outputGridRowBoard(int i) { int j; for(j=0;j<m_board.length;j++) System.out.print("|"+m_board[j]); System.out.println("|"); } public void mb_outputGrid() {int i; mb_outputGridRowBoard(); for(i=0;i<m_board.length;i++) { mb_outputGridRowBoard(i); mb_outputGridRowBoard(); } } private void mb_dataInit() { int i,j,k; for(i=0,k=1;i<m_board.length;i++) for(j=0;j<m_board.length;j++,k++) m_board[j]=k; } private boolean mb_dataEnd() { int i,j,k; for(i=0,k=9;i<m_board.length;i++) for(j=0;j<m_board.length;j++,k--) if(m_board[j]!=k) return(false); return(true); } private void mb_dataNext() { int i,j; for(i=m_board.length-1;i>=0;i--) {for(j=m_board.length-1;j>=0;j--) {if(m_board[j]==9) { m_board[j]=1;} else{ m_board[j]++; return; }} } } private boolean mb_dataCheckDifferent() { int i,j; int []digit=new int [10]; for(i=0;i<m_board.length;i++) for(j=0;j<m_board.length;j++) digit[m_board[j]]=1; for(i=1,j=0;i<digit.length;i++) j+=digit; if(j==9) return(true); return(false); } private boolean mb_dataCheckSumRow() { int i,j,k; for(i=0;i<m_board.length;i++) { for(j=0,k=0;j<m_board.length;j++) k+=m_board[j]; if(k!=15) return(false); } return(true); } private boolean mb_dataCheckSumColumn() { int i,j,k; for(i=0;i<m_board.length;i++) { for(j=0,k=0;j<m_board.length;j++) k+=m_board[j]; if(k!=15) return(false); } return(true); } private boolean mb_dataCheck() { if(! mb_dataCheckDifferent()) return(false); if(! mb_dataCheckSumRow()) return(false); if(! mb_dataCheckSumColumn()) return(false); if(m_board[0][0]+m_board[1][1]+m_board[2][2]!=15) return(false); if(m_board[0][2]+m_board[1][1]+m_board[2][0]!=15) return(false); return(true); } public void mb_arrange() { int n=1; for(mb_dataInit();!mb_dataEnd();mb_dataNext()) { if(mb_dataCheck()) { System.out.println("Result["+n+"]:"); n++; mb_outputGrid(); } } } } public class J_Grid15 { public static void main(String args[]) { J_GridBoard15 a=new J_GridBoard15(); a.mb_arrange(); } }
|