3 回答
TA贡献1812条经验 获得超5个赞
这个答案需要您的确切代码,并通过一些更改到达您期望的输出。你很接近,你只需要在每一行上打印一个间隔,并从你的第二个外环上剪下一次迭代,for以避免打印*两次。
for (int i=1;i <= 3; i++) {
for (int k=3; k >= i; k--) {
// print a new spacer at the start of each line
if (k == 3) System.out.print(" ");
System.out.print(" " + "*" + " ");
}
for (int j=1; j <= i; j++) {
System.out.print(" ");
}
System.out.println();
}
// start at k=2 so as to NOT print a double single asterisk *
for (int k=2; k <= 3; k++) {
for (int l=0; l < k; l++) {
// print a new spacer at the start of each line
if (l == 0) System.out.print(" ");
System.out.print(" "+"*"+" ");
}
System.out.println();
}
* * *
* *
*
* *
* * *
TA贡献1828条经验 获得超3个赞
首先,用其余的变量初始化 k。
int i, j, k;
然后你应该决定哪个 for 循环将负责打印的单个 '*' 并相应地调整另一个。例如,如果您提前终止第一个循环 1 步,它应该修复 2 个部分之间的间隙。
现在我保留第一个 for 循环的单个 '*' 并通过修改步骤在第二个循环中跳过它。
初始化 k=2 而不是 k=0。修复单个 * 重复以及它们之间的空间。
完全删除了使用 j 作为计数器的 for 循环,因为它会干扰输出中的间距,打印出不需要的 * 更远的地方。
最后System.out.println()在第二个 for 循环之前添加了一个,以便第二个 for 循环打印的 * 将从新行开始。
import java.util.*;
import java.lang.*;
class Rextester
{
public static void main(String args[])
{
for (int i=1;i <= 3; i++) {
System.out.println();
for (int k=3; k >= i; k--) {
System.out.print(" " + "*" + " ");
}
}
System.out.println();
for (int k=2; k <= 3; k++) {
for (int l=0; l < k; l++) {
System.out.print(" "+"*"+" ");
}
System.out.println();
}
}
}
最终,这是一个通过修改数字或在编写代码之前解决纸笔问题来解决的问题。
TA贡献1847条经验 获得超11个赞
快速而肮脏的解决方案
public static void main(String[] args) {
upperHalf(4);
bottomHalf(4);
}
private static void upperHalf(int size) {
for(int row = 0; row<size; row++){
String rowContent = "";
for(int col=0; col<size-row; col++){
rowContent+= " *";
}
if(!rowContent.equals(""))
System.out.println(rowContent);
}
}
private static void bottomHalf(int size) {
for(int row=2; row<=size; row++) {
String rowContent = "";
for(int col=0; col<row;col++)
{
rowContent+= " *";
}
System.out.println(rowContent);
}
}
添加回答
举报