2

ユーザーが必要とする行数を要求するプログラムを作成することになっています。たとえば、ユーザーが 4 を入力numberすると、1 から 16 までのすべての数字が 4 列 4 行に配置されて表示されます。4 を入力すると、次のような出力が表示されます。

1 2 3 4
8 7 6 5
9 10 11 12
16 15 14 13

ご覧のとおりパターンがあります。最初に表示される数字は 1 で、その後 4 まで増加します。次の行は 8 から始まり、5 になります。ご覧のとおり、蛇のようです。しかし、私のプログラムは機能していません。プログラムをシミュレートしようとしましたが、何が問題なのかまだわかりません。

もう 1 つの例は、3 が入力された場合です。

1 2 3
6 5 4
7 8 9

これが私の現在のコードです:助けてくださいありがとう

import java.util.*;
public class ArrayOutput2 
{
    public static void main(String[] args)
    {
        Scanner input = new Scanner(System.in);
        int number = 0;

        System.out.print("Enter number of rows: ");
        number = input.nextInt();

        int[][] num = new int[number][number];
        int k=1, i, j;

        if (number == 1)
        {
              num[0][0] = 1;
        }


            while(k< (number*number))
            {
                for(i=number; i>=1; i--)
                {
                   if (i%2==1)
                   {
                     for(j=number-1; j>=0; j--)
                         {
                             num[i-1][j]=k;
                             k++;
                         }
                   }

                   else
                         for(j=0; j<=number-1; j++)
                         {
                             num[i-1][j]=k;
                             k++;
                         }
                 }
           }
       for(i=number-1;i<0;i--)
       {
            for(j=number-1;j<0;j--)

             System.out.print(num[i][j]+"\t");
             System.out.println();   
       }

    }
}
4

3 に答える 3

4

num[][]配列が正しく設定されているようです。

最後の for ループで<toを反転するだけでよいと思います。>=

現在、i が 0 未満のときに i をループしていますが、4 から始まるため、ループに入ることはなく、コンソールに何も出力されません。

そのはず:

 for(i=number-1;i>=0;i--)
 {
    for(j=number-1;j>=0;j--)
于 2013-01-16T12:09:21.007 に答える
3

これにより、例外的な出力が生成されます。

Scanner input = new Scanner( System.in );
int number = 0;
System.out.print("Enter number of rows: ");
number = input.nextInt();

int[][] num = new int[number][number];
int k=1, i=1, y = 0;
if (number == 1)
{
     num[0][0] = 1;
}

   while(y<number)
   {
       for(int x =0;x<number;++i,++x) 
            num[y][x] = i;


       ++y;
       if(y<number)
            for(int x = number-1;x>=0;++i,--x) 
                 num[y][x] = i;

       ++y;
   }
   for(i = 0;i<number;i++)
   {
        for(int j=0;j<number;++j)

         System.out.print(num[i][j]+"\t");
         System.out.println();   
   }

それがあなたのために働くことを願っています

于 2013-01-16T12:16:09.353 に答える
0

あなたの場合、2D配列を使用する必要はないと思います。次のスニペットを試してください。

 for (int i=0; i<number; i++) {
            if (i%2 == 0) {
                for (int j=i*number; j<(i+1)*number; j++) {
                    System.out.print((j + 1) + " ");
                }
            } else {
                for (int j=(i+1)*number; j>i*number; j--) {
                    System.out.print(j + " ");
                }
            }
            System.out.println();
        }
于 2013-01-16T12:15:47.783 に答える