填充2D阵列正方形并以特定图案打印

时间:2017-03-31 12:09:31

标签: java arrays multidimensional-array 2d

我已经在这个任务问题上工作了大约4天了,我现在要发疯了。我们有针对此代码的具体说明;

  

"您的计划应按以下步骤进行:

     
      
  1. 显示欢迎讯息。

  2.   
  3. 提示用户输入的整数为3.如果输入的数字是< 3.继续提示用户,直到他们输入3号(使用do / while)。此数字将决定方阵的大小。

  4.   
  5. 按照模式1填充数组,并使用printf显示数组格式。

  6.   
  7. 按照模式2填充相同的数组,并使用printf t0格式显示数组。

  8.   
  9. 显示结束讯息。"

  10.         

    模式:enter image description here

我仍然坚持模式一。我试着先做一个for循环,其中有一个if语句,检查列号是否为偶数,如果是,则向后打印代码。该问题还建议使用while循环和do / while循环......?

关于如何进行第二种模式的任何提示。

这是我的代码。

import java.util.Scanner;
public class a3q33 
{

  public static void main(String[] args) 
  {
    Scanner keyboard = new Scanner(System.in);

    int n;

    do
    {
        System.out.println("How many rows/columns do you want your array to have? (Must be at least 3)");

        n=keyboard.nextInt();

    } while(n < 3);

    int [][] arr = new int [n][n];

     int i, j, k=1;

    for(i=0;i<n;i++)
    {
         if(i % 2 != 0)
         {   
             for(j=n;j>0;j--) 
             {
                 k = k+n; 
                 arr[i][j]=k;
                 k--;
             }
         }

         else
         {
             for(j=0;j<n;j++) 
             {
                 arr[i][j]=k;
                 k++;
             }
         }
    }

    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++) 
        {
            System.out.printf(arr[i][j]+" ");

        }
            System.out.printf("");
            System.out.println();
    }

    }
}

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:0)

假设约定为arr [row] [column],我认为你的条件检查意味着“行”而不是“列”?

此外,代码中的for循环:

for(j=n;j>0;j--)

这会将行/列索引递减到1而不是0.因此,您将错过arr [0] [...]或arr [...] [0]中的一个元素。 此外,j = n将超出界限。

相反,请尝试使用:

for(j=n-1;j>-1;j--)

这将是一个很好的第一步。

答案 1 :(得分:0)

import java.util.Scanner; 

public class a3q33{
    public static void main(String[] args){
        Scanner keyboard = new Scanner(System.in);
        int n;
        do{
            System.out.println("How many rows/columns do you want your array to have? (Must be at least 3)");
            n=keyboard.nextInt();
        } while(n < 3);

        int count = 1;
        int [][] arr = new int [n][n];
        for(int i = 0;i<n; i++){
            if(i%2==0){
                for(int j = 0;j<n; j++){
                    arr [i][j] = count;
                    count++;
                }
            }
            else{
                for(int j = n-1;j>=0; j--){
                    arr [i][j] = count;
                    count++;
                }
            }             
        }


        System.out.println("\nPattern 1 \n");
        // print the array 
        for (int i = 0; i < n; i++){
            for (int j = 0; j < n; j++){
                System.out.printf("%d\t",arr[i][j]);
            }
            System.out.println();
        }
        // reset count back to 1 and fill the array in the same way only without the if/else 
        // for n = 5 for example this will produce  [1, 2,  3,  4,  5 ]
        //                                          [6, 7,  8,  9,  10]
        //                                          [11,12, 13, 14, 15]
        //                                          [16,17, 18, 19, 20]
        //                                          [21,22, 23, 24, 25]

        count = 1;
        for(int i = 0;i<n; i++){            
            for(int j = 0;j<n; j++){
                arr [i][j] = count;
                count++;
            }
        }

        // rotate arrays using arraycopy; for array at index 1 rotate by one, at index 2 by 2 and so on see 
        //http://stackoverflow.com/questions/31174840/how-to-rotate-an-array
        //
        for (int i = 1; i<n; i++){
            int [] temp = new int [n];
            for (int j = 0; j < n; j++) {
                temp[(j + i) % n] = arr[i][j];
            }
            System.arraycopy(temp, 0, arr[i], 0, n);
            arr[i]=temp;
        }

        System.out.println("\nPattern 2 \n");
         // print the array 
        for (int i = 0; i < n; i++){
            for (int j = 0; j < n; j++){
                System.out.printf("%d\t",arr[i][j]);
            }
            System.out.println();
        }
    }
}

答案 2 :(得分:0)

您可以通过检查模数来实现:

for (int i = 0; i < n; i++) {
    int start = i * n;
    for (int j = 0; j < n; j++) {
        arr[i][j] = i * n + ((i % 2 === 0) ? (j + 1) : (n - j));
    }
}