I am new to programming and started with learning c# and now java. I came across a task creating a rhombus where the user inputs the height (odd numbers only) and the char for the rhombus. I created a for loop for the height and another loop for the characters. Here is my output:
h: 7
c: k
k
jkj
ijkji
hijkjih
ghijkjihg
But I want the output to be:
h: 7
c: k
k
jkj
ijkji
hijkjih
ijkji
jkj
k
How can I develop my logic to apply it to my code. Here is my code:
Scanner in = new Scanner(System.in);
System.out.print("h: ");
int h = in.nextInt();
System.out.print("c: ");
char c = in.next().charAt(0);
if(h%2==0){
System.out.println("Invalid number!");
return;
}
int count = 1;
int space = 1;
for (int i = 2; i < h; i )
{
for (int spc = h - space; spc > 0; spc--)
{
System.out.print(" ");
}
if (i < h)
{
space ;
}
else {
space--;
}
for (int j = 0; j < count; j )
{
System.out.print(c);
if (j < count/2)
{
c ;
}
else {
c--;
}
}
if (i < h)
{
count = count 2;
}
else {
count = count - 2;
}
System.out.println();
}
Any help is highly appreciated.
CodePudding user response:
Your code contains the following flaws:
count
andspace
variables depend on the values ofi
andh
, which makes it very hard to keep track of and understand. You should avoid hidden dependencies in your code in general- you change the value of
c
all the time. It makes it very hard to keep track of. You should never change its value - your function is too big
- strange values like
i = 2
,count/2
, incrementing by2
- incorrect conditions
You have one loop which increments i
. What you need is a second loop which decrements the value of i
. And you should also use the same approach for printing of the characters (2 loops for both sides). Let me show you:
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// load parameters
System.out.print("h: ");
int h = in.nextInt();
System.out.print("c: ");
char c = in.next().charAt(0);
// validate parameters
if (h % 2 == 0) {
System.out.println("Invalid number!");
return;
}
for(int i = 0; i <= h/2; i ) {
printSpaces((h 1) / 2 - i - 1);
printLine(c, i);
System.out.println();
}
for(int i = h/2-1; i >= 0; i--) {
printSpaces((h 1) / 2 - i - 1);
printLine(c, i);
System.out.println();
}
}
private static void printLine(char character, int sideWidth) {
for (int j = sideWidth; j >= 0; j--)
System.out.print((char) (character - j));
for (int j = 1; j <= sideWidth; j )
System.out.print((char) (character - j));
}
private static void printSpaces(int numberOfSpaces) {
for (int i = 0; i < numberOfSpaces; i ) {
System.out.print(" ");
}
}
which gives you the desired output.
CodePudding user response:
public class Rhombusstar
{
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
System.out.println("Enter N : ");
int n=sc.nextInt();
System.out.print("Enter Symbol : ");
char c = sc.next().charAt(0);
for(int i=1;i<=n;i )
{
for(int j=1;j<=n-i;j )
{
System.out.print(" ");
}
for(int j=1;j<=n;j )
{
System.out.print(c);
}
System.out.println();
}
}
}