У меня проблемы с распечаткой треугольников, рекурсивно включающих пробелы и звездочки. По-видимому, для вычисления правильного количества пробелов и звездочек может потребоваться строковый буфер или построитель строк, но у меня возникли некоторые трудности. 2 треугольника должны выглядеть так:
****
***
**
*
а также
*
**
***
****
public static String printTriangle(int num)
{
if (num == 0) {
return "";
}
String dots = "";
for (int i = 0; i < num; i++) {
dots = dots + "*";
}
System.out.println(dots);
return printTriangle(num-1) + dots;
}
public static String printTriangle2(int num) {
if (num == 0) {
return "";
}
String dots = printTriangle2(num-1);
dots = dots + ".";
String spaces = "";
for (int i = 0; i < num; i++) {
spaces = spaces + " ";
}
String line = spaces + dots;
System.out.println(line);
return line;
}
Это то, что у меня есть до сих пор. Любая помощь будет оценена по достоинству.
Это результат в настоящее время:
****
***
**
*
.
..
...
....
этот вопрос отличается от вашего другого вопроса? выглядит так же и там есть ответы stackoverflow.com/questions/52683273/…
да, потому что я хочу, чтобы это было проще. другой вывод более сложен и немного труден для понимания
вы можете передать другой параметр spaces, чтобы отслеживать количество пробелов, которые вам нужно будет распечатать (например, printTriangle (int num, int spaces ))




попробуйте следующий код и позвоните с step=0
printTriangle(4,0)
printTriangle2(4,0)
public static String printTriangle(int num, int step)
{
if (num == 0) {
return "";
}
String ast = "";
for (int i = 0; i < num; i++) {
ast = ast + "*";
}
String sps = "";
for (int i = 0; i < step; i++) {
sps = sps + " ";
}
System.out.println(sps+ast);
return printTriangle(num-1, step+1) ;
}
public static String printTriangle2(int num, int step)
{
if (num == 0) {
return "";
}
String ast = "";
for (int i = 0; i <= step; i++) {
ast = ast + "*";
}
String sps = "";
for (int i = 0; i < num; i++) {
sps = sps + " ";
}
System.out.println(sps+ast);
return printTriangle2(num-1, step+1) ;
}
Большое спасибо за то, что помог мне решить эту проблему, используя мой код и мою логику. Я действительно понимаю это сейчас!
Вот довольно простая реализация:
static void printTriangle(int n, int len)
{
if (n == len) return;
printRow(n, len);
printTriangle(n+1, len);
printRow(n, len);
}
static void printRow(int n, int len)
{
for(int i=0; i<n; i++) System.out.print(" ");
for(int i=n; i<len; i++) System.out.print("*");
System.out.println();
}
Тестовое задание:
printTriangle(0, 4);
Выход:
****
***
**
*
*
**
***
****
Хотя мне это нравится:
static void printTriangle(String s)
{
if (!s.contains("*")) return;
System.out.println(s);
printTriangle(" " + s.replaceFirst("\\*", ""));
System.out.println(s);
}
Вызывается с
printTriangle("****");
А что дает ваша попытка? Вы через него отлаживали? Что это показало?