ورود

View Full Version : سوال: ساعت شنی در جاوا



sajjad4563
پنج شنبه 06 شهریور 1393, 00:54 صبح
سلام
متد من دو پارامتر داره:
size که طول عمودی ساعت شنی هست
symbol که کاراکتر استفاده شده در ساعت شنی رو مشخص میکنه

برای مثال وقتی متد رو اینجوری فراخوانی کنم:

printHourseGlass(7,'?')

خروجی باید این باشه:

???????
?????
???
?
???
?????
???????

ولی اینجوری میشه:


???????
?????
???
?
???
?????
???????

متد:
public static void printHourseGlass(int size, char symbol) {

int numbeOfSymbol = size;
int numberOfSpace = 0;

while (numbeOfSymbol > 0) {

for (int i = 0; i < numbeOfSymbol; i++) {
System.out.print(symbol);
}
System.out.println();
numberOfSpace++;
for (int i = numberOfSpace; i > 0; i--) {
System.out.print(" ");
}
numbeOfSymbol -= 2;
}

numbeOfSymbol = 3;
numberOfSpace = 2;
while (numbeOfSymbol <= size) {

for (int i = numbeOfSymbol; i > 0; i--) {
System.out.print("j"); // Problem is here
}
System.out.println();
numberOfSpace--;
for (int i = 0; i < numberOfSpace; i++) {

System.out.print(" ");
}
numbeOfSymbol += 2;
}
}

مشکا در متد پرینت است!
ولی نمیدونم چجوری رفع میشه!

vahid-p
پنج شنبه 06 شهریور 1393, 20:04 عصر
چون تعداد space های مرحله قبل شروع مرحله بعد هست. space های مربوط به هر خط رو همونجا ایجاد کن. همچنین تعداد space ها بین دو حلقه while متغیر هست و نمیشه عدد ثابت نسبت داد. تعدادش از numberOfSpace = (size/2)-1; بدست میاد.
به هر حال این کد : ( عدد size باید فرد باشه )
public static void printHourseGlass(int size, char symbol) {

int numbeOfSymbol = size;
int numberOfSpace = 0;

while (numbeOfSymbol > 0) {
for (int i = numberOfSpace; i > 0; i--) {
System.out.print(" ");
}
for (int i = 0; i < numbeOfSymbol; i++) {
System.out.print(symbol);
}
System.out.println();
numberOfSpace++;
numbeOfSymbol -= 2;
}

numberOfSpace = (size/2)-1;
numbeOfSymbol = 3;

while (numbeOfSymbol <= size) {
for (int i = 0; i < numberOfSpace; i++) {

System.out.print(" ");
}
for (int i = numbeOfSymbol; i > 0; i--) {
System.out.print(symbol);
}
System.out.println();
numberOfSpace--;
numbeOfSymbol += 2;
}
}

sajjad4563
پنج شنبه 06 شهریور 1393, 22:12 عصر
چون تعداد space های مرحله قبل شروع مرحله بعد هست. space های مربوط به هر خط رو همونجا ایجاد کن. همچنین تعداد space ها بین دو حلقه while متغیر هست و نمیشه عدد ثابت نسبت داد. تعدادش از numberOfSpace = (size/2)-1; بدست میاد.
به هر حال این کد : ( عدد size باید فرد باشه )
public static void printHourseGlass(int size, char symbol) {

int numbeOfSymbol = size;
int numberOfSpace = 0;

while (numbeOfSymbol > 0) {
for (int i = numberOfSpace; i > 0; i--) {
System.out.print(" ");
}
for (int i = 0; i < numbeOfSymbol; i++) {
System.out.print(symbol);
}
System.out.println();
numberOfSpace++;
numbeOfSymbol -= 2;
}

numberOfSpace = (size/2)-1;
numbeOfSymbol = 3;

while (numbeOfSymbol <= size) {
for (int i = 0; i < numberOfSpace; i++) {

System.out.print(" ");
}
for (int i = numbeOfSymbol; i > 0; i--) {
System.out.print(symbol);
}
System.out.println();
numberOfSpace--;
numbeOfSymbol += 2;
}
}


ممنونم
میشه بگید دقیقا مشکل من کجاها بود؟