- <p>晕。大晚上的看见你这题就睡不着了研究了俩小时。。。。</p><p>思路:1、每一行为一个一维数组,元素的顺序按方阵需求排列。使用for循环来为数组赋值。
- 2、声明一个变量,用作为数组中每个元素赋值。因为方阵中的数字是从1开始递增的。
- 只不过排列的顺序不一样。
- 3、假如一个二维数组中有4个一维数组,一维数组中各有4个元素,这代表着方阵的行和列。
- (1) 因为程序是逐行打印的,经观察方阵,发现其右边列为递增,既下标为1,2,3的这三个数组的最大下标的值。我们可以利用for循环进行赋值,</p><p> (2)同理可以将方阵首行的数据直接以一个for循环完成赋值。代码如下;</p><p>关键:1、关键就在用于赋值的这个变量。整个程序都应围绕这个变量的递增来编写循环。好处就在于无需凭空想象,只需按部就班的为相应位置的元素赋值即可。</p><p>
- </p><p>package javase基础毕向东;
- import java.util.Scanner;
- public class Gn {
- public static void main(String[] args)
- {
- System.out.println("你想要几行?");
- Scanner in=new Scanner(System.in);
- int zqq=in.nextInt(); //用于接收用户输入的行数。</p><p>int[][] arr=new int[zqq][zqq]; //建立一个二维数组。
- int fz=0; //这个变量最关键,是用来给数组赋值的,整个赋值的过程都应该跟着这个变量走。
- int x=0;
- int n=(zqq+1)/2;
- for(int y=0;y<n;y++){ //控制外循环的次数。如用户输入4,既循环2次。</p><p>for(x=y;x<=zqq-y-1;x++){
- arr[y][x]=++fz; //此为对方阵首行进行赋值,一次搞定首行。如1234
- }
- for(x=y+1;x<=zqq-y-1;x++){
- arr[x][zqq-y-1]=++fz; //要跟着fz的变化对数组赋值,比如此时fz的值为5.观察方阵编写循环即可。
- }
- for(x=zqq-y-2;x>=y;x--){
- arr[zqq-y-1][x]=++fz; //同上,这里赋值的是思路3中(1)。
- }
- for(x=zqq-y-2;x>=y+1;x--){
- arr[x][y]=++fz; //同上。注意循环判定条件的变化。
- }
- }
- for(int i=0;i<zqq;i++) //输出二维数组
- {
- for(int j=0;j<zqq;j++){
- System.out.print(arr[i][j]+" ");
- }
- System.out.println();
- }
- }
- }
- </p>
复制代码
吐血三升,我得吃点鸡蛋补补。。。。:dizzy:
|