0

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

25  24  23  22  21
16  17  18  19  20  
15  14  13  12  11  
 6   7   8   9  10  
 5   4   3   2   1

ご覧のとおり、パターンがあります。最初に表示される数値は、数値の2乗です。次に、数の2乗から1を引いた数になります。21に達するまで5が減算され、16になります。次に、20に達するまで1が加算されます。ご覧のとおり、ヘビのようです。

問題は、1が入力された場合を除いて任意の数で機能することです。0は、1を入力したときの現在の結果です。

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

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;

            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=0;i<number;i++)
        {
             for(j=0;j<number;j++)

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

    }
}
4

4 に答える 4

2

1したがって、ユーザーが値として入力するとしますnumber == 1。配列num[1][1]を割り当てます。これは、可能なセルが1つしかない配列です。number[0][0]

次に、ループが開始されます

k=1;
while (k<(number*number)); // which is like while(1<1*1)==FALSE

したがって、ループは使用されません。次を使用できます。

1)do-whileループを少なくとも1回実行するループ2)または、ループが終了した直後にステートメントを
追加します。ifwhile()

// Using an IF statement immediately after the unmodified while()
if (number==1)
{
   num[0][0]=1;
}


// or with a loop DO-WHILE
    do
    {
        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++;
              }
         }
   }while(k<(number*number));
于 2013-01-15T12:13:29.973 に答える
1

の場合number = 1、2Darray int[][] numはループに入らないため入力されませんwhile(k<(1*1))。したがって、2D値を出力するbottom forループは0、配列自体が初期化されないためにのみ出力されます。

于 2013-01-15T12:05:20.617 に答える
0

num[0][0]ループに入っていないため、初期化されていません。ループの前にこれを試してください:

if (number == 1)
    num[0][0] = 1;
于 2013-01-15T12:08:14.743 に答える
0
if(number == 1 ) {
    System.out.println("1");
    return;
}
于 2013-01-15T14:54:57.180 に答える