I'm taking a beginners Java course over the summer. I need to make a pyramid using loops for homework. The pyramid has to be made out of asterisks; in addition, size of pyramid is determined by user.
This is what I have for code now;
public class Pyramid {
public static void main(String[] args) {
int size = 6;
for (int x = 0; x < size; x++) {
for (int y = x; y < size; y++) {
}
for (int z = 0; z <= x; z++) {
System.out.print("*");
}
System.out.println("");
}
}
}
The problem of my code is that the number of asterisks in each row is wrong by one.
for (int z = 0; z <= x; z++) {
will execute the loop until z <= x
is no longer true. That means it executes for z=0
, z=1
, z=2
, ..., z=x
--which means it actually executes the loop x+1
times. (The next z
, z=x+1
, is the first z
that makes z<=x
false.)
The normal idiom in Java (and other language with C-like for
statements) is to start at 0 and use <
when checking for the upper bound:
for (int z = 0; z < x; z++) {
You'll run into cases where you want to use <=
, and you'll run into cases where you want to start at 1 instead of 0, but the majority of for
loops with an integer index follow this form.
If I understand your question correctly :
public class Pyramid {
public static void main(String[] args) {
int size =6;
for (int i = 1; i <= size; i++) {
for (int x = size - 1; x >= i; x--) {
System.out.print(" ");
}
for (int y = 1; y<= i; y++) {
System.out.print("*");
}
for (int z= 1; z <= i - 1; z++) {
System.out.print("*");
}
System.out.println();
}
}
}
The output is :
*
***
*****
*******
*********
***********
If I understand your question, you could do something like this
int levels = 0;
Scanner input = new Scanner(System.in);
while (levels < 1) {
System.out.println("What size triangle would you like?");
if (input.hasNextInt()) {
levels = input.nextInt();
} else if (input.hasNext()) {
System.out.println("Not a valid size: " + input.next());
} else {
System.err.println("no more input");
System.exit(1);
}
}
for (int i = 1; i <= levels; i++) {
StringBuilder sb = new StringBuilder();
int t = i;
while (--t > 0) {
sb.append("*");
}
StringBuilder spaces = new StringBuilder();
for (t = 0; t < levels - i; t++) {
spaces.append(' ');
}
System.out.println(spaces.toString() + sb + "*" + sb);
}
To solve this problem it's best to think about the numbers that go into it...
*
***
*****
If you label the parts of the triangle
* row 1, 2 spaces, 1 star
*** row 2, 1 space, 3 stars
***** row 3, 0 spaces, 5 starts
Then you can just start playing with the numbers The number of spaces to display is 3 - row # + 1 The number of stars to display is 2 * row - 1
Then construct a loop to draw each line. within this loop, you need a loop to draw the number of spaces and a loop to draw the number of stars
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.