Got this question in a test.
Display the following number pattern using Java.
User inputs number of rows. For example 3
1112 3222 3334
For 5
111112 322222 333334 544444 555556
and so on.
This is the solution I came up with:
public static void NumberPattern(int n) {
int myarray[][] = new int[n][n + 1];
int i;
int j;
for (i = 0; i < 1; i++) //first row
{
for (j = 0; j < n; j++)
{
myarray[i][j] = i + 1;
}
myarray[i][n] = i + 2;
}
for (i = 1; i < myarray.length; i++)
{
if (i % 2 != 0) //odd rows
{
j = 1;
myarray[i][0] = i + 2;
while (j <= n)
{
myarray[i][j] = i + 1;
j++;
}
j = 1;
}
if (i % 2 == 0) //even rows
{
j = 0;
while (j < n) {
myarray[i][j] = i + 1;
j++;
}
myarray[i][n] = i + 2;
j = 0;
}
}
printArray(myarray);
}
public static void printArray(int n[][])
{
System.out.println("The Pattern is:");
for (int[] array : n) {
for (int v : array) {
System.out.print(" " + v);
}
System.out.println();
}
}
Is there a better way of solving this problem with only one for
loop?
1 Answer 1
Since all you've been asked is to display output, a single simple nesting of two for loops without arrays should work just fine. Note that in all cases, you know in advance prior to performing a loop how many times the loop will iterate, and in this situation a for loop is cleaner than a while loop (though of course both would work):
// note that method namess should begin with a lower-case letter
public static void numberPattern(int rows) {
for (int row = 0; row < rows; row++) {
for (int col = 0; col < rows + 1; col++) {
int number = 0;
if (row % 2 == 0) {
number = col < rows ? row + 1 : row + 2;
} else {
number = col == 0 ? row + 2 : row + 1;
}
System.out.print(number);
}
System.out.println();
}
}
If you need to store the numbers to be used elsewhere, then yes, put them into an array.