slimmey
slimmey

Reputation: 29

Loop with incremental value based on user input

I have a task about incremental values in a loop based on user input.

The task is that the following lines are generated in the console

*
**
***
****
*****

And the amount of lines are decided by user input. I.e. if the user types in 2 it gives the following output:

*
**

My current code is:

import static javax.swing.JOptionPane.*;
public class loop1 {
    public static void main(String[] args){
        int current_line = 0;
        String input_line = showInputDialog("type here ");
        int target_line = Integer.parseInt(input_line);
        while (current_line != target_line){
            String sign = "*";
            System.out.println(sign);
            current_line ++;
        }
    }
}

But I can't seem to get the number of asterisks (*) to increase for every time it runs. How can I accomplish this?

Upvotes: 1

Views: 2063

Answers (4)

user63762453
user63762453

Reputation: 1734

You can make it simpler by using nested for loops. Modify your loop to:

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

Upvotes: 1

GoGoris
GoGoris

Reputation: 840

You print everytime one '*'-sign. You don't necessarily need two loops. You can place the sign outside of the loop and you can add an asterisk every iteration with string.concat("*"). Concatenating actually means combining two strings into one, so you actually combine the sign from the previous iteration with a new sign.

int current_line = 0;
String input_line = showInputDialog("type here ");
int target_line = Integer.parseInt(input_line);
String sign = "*";
while (current_line != target_line){
    sign.concat("*");
    System.out.println(sign);
    current_line ++;
}

Upvotes: 0

APerson
APerson

Reputation: 8422

You actually need two loops here, but you only have one. You have a while loop to print out the asterisks, but you also need a loop to increment the number of asterisks printed out each time.

Some pseudocode might look like:

For (int i = 1 to whatever value the user entered):
    For (int j = 1 to i):
        Print an asterisk

Actual code would look like:

int numLines = Integer.parseInt(showInputDialog("type here "));
for(int numAsterisks = 0; numAsterisks < numLines; numAsterisks++) {
    for(int i = 0; i < numAsterisks; i++) {
        System.out.print("*");
    }
    System.out.println(); // Start a new line
}

Upvotes: 3

Eran
Eran

Reputation: 393771

You need a nested loop. Each iteration of the outer loop (which is the loop you already have) would print a single row, and each iteration of the inner loop would print a single asterisk for the current row.

Upvotes: 4

Related Questions