Java论坛 - Java开发,技术交流与交友,Java工作机会,培训,Web开发,J2EE技术的乐园 » J2ME技术基础 » 请大家帮我分析一下
本页主题: 请大家帮我分析一下 打印 | 加为IE收藏 | 收藏主题 | 上一主题 | 下一主题

worryd



该用户目前不在线
级别: 新手上路
精华: 0
发帖: 1
威望: 2 点
金钱: 10 RMB
贡献值: 0 点
注册时间:2006-12-06
最后登录:2006-12-06

请大家帮我分析一下

文字
我是新手在学习课本的时候对于以下这个程序的运行不了解,希望大家帮忙:
这是一个输出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();
  }
}
顶端 Posted: 2006-12-06 21:28 | [楼 主]
Java论坛 - Java开发,技术交流与交友,Java工作机会,培训,Web开发,J2EE技术的乐园 » J2ME技术基础

Total 0.020059(s) query 2, Time now is:10-31 13:35, Gzip enabled
Powered by Code © 2003-07 Corporation