You are doing a lot of if-condition to find what you need to print. This works but this is a verbose. You could find some logic in what you want to print.
Your output is a simple square matrix that you want to split by it's diagonal. Here is the matrix :
0x0 0-1 0-2 0-3 0-4 0-5 0-6 0-7 0-8 0-9
1-0 1x1 1-2 1-3 1-4 1-5 1-6 1-7 1-8 1-9
2-0 2-1 2x2 2-3 2-4 2-5 2-6 2-7 2-8 2-9
3-0 3-1 3-2 3x3 3-4 3-5 3-6 3-7 3-8 3-9
4-0 4-1 4-2 4-3 4x4 4-5 4-6 4-7 4-8 4-9
5-0 5-1 5-2 5-3 5-4 5x5 5-6 5-7 5-8 5-9
6-0 6-1 6-2 6-3 6-4 6-5 6x6 6-7 6-8 6-9
7-0 7-1 7-2 7-3 7-4 7-5 7-6 7x7 7-8 7-9
8-0 8-1 8-2 8-3 8-4 8-5 8-6 8-7 8x8 8-9
9-0 9-1 9-2 9-3 9-4 9-5 9-6 9-7 9-8 9x9
I've highlighted the diagonal by using a x
instead of an -
.
And here is what you want to print (with the same spaces)
x o o o o o o o o o
x x o o o o o o o o
x x x o o o o o o o
x x x x o o o o o o
x x x x x o o o o o
x x x x x x o o o o
x x x x x x x o o o
x x x x x x x x o o
x x x x x x x x x o
x x x x x x x x x x
You can see some pattern here. Every place you want an o
is on the right of the diagonal.
So you can write this as a condition depending on x
and y
like this :
- if
x < y
: we are on the right of the diagonal-> O - if not
x < y
: we are on the left or on the diagonal -> X
You could use a if-else to print x
or o
but I like to do it on one line so I used use a simple ternary condition: (ternary is simple condition ? true statement : false statement
)
for(int x = 0; x < 10 ; ++x){
for(int y = 0; y < 10 ; ++y){
System.out.print(x < y ? 'o' : 'x');
}
System.out.println();
}