Anne
Anne

Reputation: 31

Nested for loops 0123

I need to create a nested for loops that gives the following output,

0
 1
  2
   3

This is what I have, but for the second test, userNum is replaced by 6 and obviously my code fails.. help?

    public class NestedLoop {
    public static void main (String [] args) {
      int userNum  = 0;
      int i = 0;
      int j = 0;

       for(i = 0; i <= userNum; i++){
        System.out.println(i);

           for(i = 1; i <= userNum; i++){
           System.out.println(" " +i);

              for(i = 2; i <= userNum; i++){
               System.out.println("  " +i);

                 for(i = 3; i <= userNum; i++){
                 System.out.println("   " + i);

          }
         }
        }
       }
         return;
   }
}

Upvotes: 2

Views: 1963

Answers (4)

Keri Silverado
Keri Silverado

Reputation: 1

C/C++

#include <iostream>
using namespace std;

int main() {

int userNum;
int i;
int j;

cin >> userNum;

for (i = 0; i <= userNum; ++i) {
    for (j = 0; j < i; ++j) {
        cout << " ";
    }
    cout << i << endl;
}
return 0;
}

Upvotes: 0

djm.im
djm.im

Reputation: 3323

Let's analyse the task In every line, we should print a number and different number spaces in the front of the number.
For that, we need two loops - one outer to iterate from 0 to N and one inner to add spaces in front of the number.

private static void method1(int userNum) {
    int nummSpaces = 0;
    for (int i = 0; i <= userNum; i++) {
        for (int j = 0; j < nummSpaces; j++) {
            System.out.print(" ");
        }
        nummSpaces++;
        System.out.println(i);
    }
}

In this solution, we have variable numSpaces which used to count the number of spaces in front of the number. It is unneeded - we can use variable i for that purpose.

private static void method2(int userNum) {
    for (int i = 0; i <= userNum; i++) {
        for (int j = 0; j < i; j++) {
            System.out.print(" ");
        }
        System.out.println(i);
    }
}

Let's analyses once again the output
- the fist line: printed zero spaces and number 0
- the second line: printed one space and number 1
- the third line: printed two spaces and number 2 - and so on

Finally, we can use just one variable, which contains spaces and after that print the length of it:

private static void method3(int userNum) {
    for (String spaces = ""; spaces.length() <= userNum; spaces += " ") {
        System.out.println(spaces + spaces.length());
    }
}

Upvotes: 0

Makoto
Makoto

Reputation: 106518

Let's talk a bit about what your intention is with these loops.

The inner loop is meant to produce an arbitrary number of spaces, depending on what number you're iterating on. So if you're on number 0, you produce no spaces, and if you're on 1, you produce one space, and so forth. The other caveat is that they all must appear on the same line, so System.out.println is the incorrect choice.

You would want to use System.out.print to print out the spaces. So let's write that.

for(int j = 0; j < 6; j++) {
    System.out.print(" ");
}

This will print out six spaces unconditionally. What that condition is depends on the current number we're iterating on. That comes from your outer loop.

You only need to define a loop that starts from an arbitrary starting point - like 0 - and then loop until you are at most your ending number. For this, your current loop is sufficient:

for(i = 0; i <= userNum; i++) {

}

Now, we need to bring the two pieces together. I leave the figuring out of the question mark and what to print after you've printed the spaces as an exercise to the user, bearing in mind that you must stop printing spaces after you've reached your number.

for(int i = 0; i <= userNum; i++) {
    for(int j = 0; j < ?; j++) {
        System.out.print(" ");
    }
}

Upvotes: 0

Konrad Viltersten
Konrad Viltersten

Reputation: 39298

I think (it's a guess, though) that you're looking for this.

public static void main (String [] args)
{
  int limit = 6;

  for(int i = 0; i <= limit; i++)
  {
    for(int j = 0; j < i; j++)
      System.out.print(" ");
    System.out.println(i);
  }
}

The reason why your approach fails is, as I see it, that you are looping through the numbers to show (which is right) but you fail to loop up on the number of spaces (which I resolved by relating the inner loop's limit to the outer loop's current value.

Upvotes: 1

Related Questions