假设一个名为makeLine的方法的可用性,该方法可以传递一个非负整数n和一个字符c,并返回一个由n个相同的字符组成的字符串,这些字符都等于c。编写一个名为printTriangle的方法,该方法接收两个整数参数n和k。如果n为负,则该方法不执行任何操作。如果n碰巧是偶数,则将其值提高到下一个奇数(例如4 - > 5)。然后,当k的值为零时,该方法按如下方式打印O的SYMMETRIC三角形(大写字母O):首先是一行n O,然后是一行n-2 O' s (缩进一个空格),然后是一行n-4 O(缩进两个空格),依此类推。例如,如果方法收到5,0(或4,0),则会打印:
OOOOO
OOO
O
注意:在上面的输出中,第一行在第一个O之前包含0个空格,下一个第1行包含空格,依此类推。
注意:这些指令说明当k为零时该方法的作用,但是程序员可以自行决定当k不为零时它的作用,并将其用于您的优势。
该方法不得使用任何类型的循环(for,while,do-while)来完成其工作。该方法应调用makeLine来完成创建不同长度的字符串的任务。
这是我到目前为止所拥有的。我在找出放置间距的位置时遇到了麻烦。我相信它与k有关,但我不太确定。
public void printTriangle(int n, int k){
if(n < 0)
return;
if(n % 2 == 0)
n++;
if(k == 0){
System.out.println(makeLine(n, 'O'));
printTriangle(n-2, 0);
}
}
答案 0 :(得分:1)
我不会给你答案,但希望这会给你一些提示。递归方法通过调用自身来解决较小版本的相同问题来解决问题。在你的情况下,问题是打印这个(我把b
放在空白的地方):
OOOOO
bOOO
bbO
您正在打印第一行,然后解决相同问题的较小版本,即打印较小的三角形:
bOOO
bbO
问题是这个较小的版本并不完全相同;它必须在每行之前有额外的空格。多少额外空间?好吧,这就是导师说“使用k
为你的优势”的原因。你如何递归地调用该方法,并使用k
告诉它显示额外的空格?
答案 1 :(得分:0)
我有解决人们“家庭作业”的问题。我会解释这是如何帮助你学习的。
以下是代码的工作原理。
首先,与您一样,您必须检查值n是否为奇数。如果是,请按照您的方式增加值,使其均匀。
现在你需要建立你的'三角'。通过使用递归来完成此操作。对于三角形的每一行,您需要打印空格,然后打印'O',然后通过打印空格来结束行。
在您的示例中,'X代表空格,'O'代表三角形:
OOOOO
XOOOX
XXOXX
此外,请看一个更大的例子:
OOOOOOOOO
XOOOOOOOX
XXOOOOOXX
XXXOOOXXX
XXXXOXXXX
如您所见,每次添加新行时,每侧都会添加一个额外的空格。因此,您可以使用'k'来打印空间。为每次递归执行添加1到'k',将处理此问题。现在您只需编辑System.out.println()
语句即可添加makeLine
,以便绘制空格(或'X')以及'O'。
public void printTriangle(int n, int k){
if(n <= 0)
return;
if(n % 2 == 0)
n++;
System.out.println(makeLine(k, ' ') + makeLine(n, 'O') + makeLine(k, ' '));
printTriangle(n-2, k+1);
}
希望这有帮助!如果你有问题,请随时提问。