Java:显示由字符组成的奇数直角三角形
我必须编写一个程序,将大小值转换为直角三角形(由Java:显示由字符组成的奇数直角三角形,java,Java,我必须编写一个程序,将大小值转换为直角三角形(由#字符组成),以便输出如下所示: # # ### ##### # ### ##### ####### 第一个三角形的大小为1。 第二个三角形的大小为4。 第三个三角形的大小为6。 请注意,给定三角形中每行的字符数总是奇数。 还请注意,每个三角形在最大点的高度可以通过size/2+1 我尝试过这个问题,但我一直在想如何在每行显示正确数量的符号 以下是我自己的代码: public class triangle
#
字符组成),以便输出如下所示:
#
#
###
#####
#
###
#####
#######
第一个三角形的大小为1。
第二个三角形的大小为4。
第三个三角形的大小为6。
请注意,给定三角形中每行的字符数总是奇数。
还请注意,每个三角形在最大点的高度可以通过size/2+1
我尝试过这个问题,但我一直在想如何在每行显示正确数量的
符号
以下是我自己的代码:
public class triangle {
public static void drawTriangle(int size) {
int column = (size/2) + 1;
for (int i = 0; i <= column; i++) {
for (int j = size; j >= 0; j--) {
if (i <= j) {
System.out.print(" ");
}
else {
System.out.print("#");
}
}
System.out.println();
}
}
public static void main(String[] args) {
drawTriangle(1);
drawTriangle(4);
drawTriangle(6);
}
}
正如你所看到的,我以正确的方式排列了三角形,并且得到了每个三角形的高度。我只是不知道如何才能从每一行的字符中得到正确的数字
我尝试了几件事,包括将我的第一个for循环从:
for (int i = 0; i <= column; i++)
感谢您的帮助。让我们从代码中退一步,用英语思考这个问题。第一次尝试这样做让我想到以下几点:
For each row
output the correct number of spaces and #s
第一行显示外部for循环需要计算行数。我认为这是存储在
size
变量中的。我由此得出结论,for循环是反向的。外部循环应该迭代行,内部循环应该迭代列。使用了一个简单的StringUtil,但是您也可以不用它来编写它
public static void drawTriangle(int size) {
int maxRow = size + 1;
for (int i = 1; i <= maxRow; i+=2) {
System.out.println(StringUtils.repeat(" ", maxRow-i) + StringUtils.repeat("#", i));
}
}
publicstaticvoiddrawtriangle(int-size){
int maxRow=大小+1;
对于(inti=1;i,给你:
public static void drawTriangle(int size) {
for (int i = 1; i <= size + 1; i += 2) {
for (int spaces = 0; spaces <= size - i; spaces++) {
System.out.print(" ");
}
for (int hashes = 0; hashes < i; hashes++) {
System.out.print("#");
}
System.out.println();
}
System.out.println();
}
publicstaticvoiddrawtriangle(int-size){
对于(int i=1;i对于给定的大小
,每行包含大小+1个
字符(可以是“”,也可以是“#”)。第一行的前导空格数为大小
,每行的前导空格数减少2
此简单方法实现了上述规则:
public static void drawTriangle(int size) {
int nSpaces = size;
for (int i = (size/2) + 1; --i >= 0; ) {
for (int j = 0; j <= size; j++) {
System.out.print(j < nSpaces ? ' ' : '#');
}
System.out.println();
nSpaces -= 2;
}
}
publicstaticvoiddrawtriangle(int-size){
int nSpaces=大小;
对于(inti=(大小/2)+1;--i>=0;){
对于(int j=0;j,请显示您尝试的更改的示例输出,并解释输出与您想要的不同之处。我编辑了我的问题…如果您注意到我的输出与我想要的有很大不同。有没有不使用StringUtils的方法?是的,编写您自己的repeat()
方法。它没有那么复杂。如果你只是想跳过i
的所有偶数值,为什么不让它迭代奇数,就像中的(int i=1;我很高兴能提供帮助。我添加了一点说明来帮助您理解它。通过一点巧妙的操作,您可以完全删除lineLen
和iterations
变量。感谢您的建议。我在回答中更改了代码,以显示修改和改进后的代码。
public static void drawTriangle(int size) {
int maxRow = size + 1;
for (int i = 1; i <= maxRow; i+=2) {
System.out.println(StringUtils.repeat(" ", maxRow-i) + StringUtils.repeat("#", i));
}
}
public static void drawTriangle(int size) {
for (int i = 1; i <= size + 1; i += 2) {
for (int spaces = 0; spaces <= size - i; spaces++) {
System.out.print(" ");
}
for (int hashes = 0; hashes < i; hashes++) {
System.out.print("#");
}
System.out.println();
}
System.out.println();
}
public static void drawTriangle(int size) {
int nSpaces = size;
for (int i = (size/2) + 1; --i >= 0; ) {
for (int j = 0; j <= size; j++) {
System.out.print(j < nSpaces ? ' ' : '#');
}
System.out.println();
nSpaces -= 2;
}
}