初学者Java控制循环未产生预期结果
我正在尝试创建一个由星号组成的钻石形状,但是我似乎不能得到右下角的腿不正确?为什么我的代码不正确?提前谢谢初学者Java控制循环未产生预期结果,java,loops,for-loop,counter,Java,Loops,For Loop,Counter,我正在尝试创建一个由星号组成的钻石形状,但是我似乎不能得到右下角的腿不正确?为什么我的代码不正确?提前谢谢 import java.util.Scanner; public class Diamond { public static void main(String[] args) { System.out.println("Enter the size of the diamond and press enter:"); Scanner
import java.util.Scanner;
public class Diamond
{
public static void main(String[] args)
{
System.out.println("Enter the size of the diamond and press enter:");
Scanner kb = new Scanner(System.in);
int N = kb.nextInt();
for (int c0 = 1; c0 <= N; c0++) // establishes the number of lines in the diamond
{
for (int c1 = 0; c1 <= N-1-c0; c1++) System.out.print(" "); // establishes the number of spaces before each asterisk
System.out.print("*");
for (int c2 = 3; c2 <= c0*2; c2++) System.out.print(" "); //adds a space between both asterisks. This boolean check repeats for each line
System.out.print("*");
System.out.println();
}
for (int c0 = 1; c0 <= N; c0++) // establishes the number of lines in the diamond
{
for (int c1 = N; c1 >= N+2-c0; c1--) System.out.print(" "); // establishes the number of spaces before each asterisk
System.out.print("*");
for (int c2 = N*2; c2 >= c0+2; c2--) System.out.print(" "); //adds a space between both asterisks. This boolean check repeats for each line
System.out.print("*");
System.out.println();
}
}
}
我稍微调整了一下你的程序。。。你需要做更多的工作来去掉一些额外的星号。至少它会给你更多的想法:
import java.util.Scanner;
public class Diamond
{
public static void main(String[] args)
{
System.out.println("Enter the size of the diamond and press enter:");
Scanner kb = new Scanner(System.in);
int N = kb.nextInt();
for (int c0 = 1; c0 <= N; c0++) // establishes the number of lines in the diamond
{
for (int c1 = 0; c1 <= N-1-c0; c1++) System.out.print(" "); // establishes the number of spaces before each asterisk
System.out.print("*");
for (int c2 = 3; c2 <= c0*2; c2++) System.out.print(" "); //adds a space between both asterisks. This boolean check repeats for each line
System.out.print("*");
System.out.println();
}
for (int i = N ; i >= 1; i--)
{
for (int j = 0; j < (N - i); j++)
System.out.print(" ");
for (int j = 1; j <= i; j++)
System.out.print("*");
for (int k = 1; k < i; k++)
System.out.print("*");
System.out.println();
}
}
}
如果你提取一个方法,事情会可读得多。但首先,
for (int c2 = N*2; c2 >= c0+2; c2--) System.out.print(" ");
应该是
for (int c2 = 0; c2 < (N-c0)*2; c2++) System.out.print(" ");
static String getSpaces(int n) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < n; i++) {
sb.append(' ');
}
return sb.toString();
}
或者类似的
for (int c2 = 0; c2 < (N-c0)*2; c2++) System.out.print(" ");
static String getSpaces(int n) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < n; i++) {
sb.append(' ');
}
return sb.toString();
}
你可以这样称呼它
for (int c0 = 0; c0 < N; c0++) {
System.out.print(getSpaces(N - c0));
System.out.print("*");
System.out.print(getSpaces(c0 * 2));
System.out.print("*");
System.out.println();
}
for (int c0 = 1; c0 <= N; c0++) {
System.out.print(getSpaces(c0));
System.out.print("*");
System.out.print(getSpaces((N - c0) * 2));
System.out.print("*");
System.out.println();
}
这就成功了。我还没有学会其他的对象,但是你对我现有代码的修复成功了