我在印刷填充钻石时遇到一些问题。该程序错误地格式化钻石。
此代码:
for (rows = 1; rows < height; rows += 2){
for (spaces =0; spaces < height - 1 - rows / 2; spaces++){
System.out.print(" ");
}
for (stars = 0; stars < rows; stars++){
System.out.println("*");
}
}
打印出来:
Please enter a positive odd height for the diamond:
9
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
编辑:我已经完成了上半部分的钻石,但我似乎无法将下半部分缩小。它创造了一个无限循环。
for (rows = 1; rows < height + 1 ; rows += 2){
for (spaces =0; spaces < height - 1 - rows / 2; spaces++){
System.out.print(" ");
}
for (stars = 0; stars < rows; stars++){
System.out.print("*");
}
System.out.println("");
}
for (rows = 1; rows < height; rows -= 2){
for (spaces =0; spaces < height; spaces++){
System.out.print(" ");
}
for (stars = 0; stars < rows; stars++){
System.out.print("*");
}
System.out.println("");
}
编辑2:修正了无限循环,但现在星星未对齐:
for (rows = 1; rows < height + 1 ; rows += 2){
for (spaces =0; spaces < height - 1 - rows / 2; spaces++){
System.out.print(" ");
}
for (stars = 0; stars < rows; stars++){
System.out.print("*");
}
System.out.println("");
}
for (rows = height - 2; rows >= 1; rows -= 2){
for (spaces =0; spaces < height; spaces++){
System.out.print(" ");
}
for (stars = 0; stars < rows; stars++){
System.out.print("*");
}
System.out.println("");
}
输出:
*
***
*****
*******
*********
*******
*****
***
*
编辑3: 得到星星对齐,只需摆脱中间行。
代码:
for (rows = 1; rows < height + 1 ; rows += 2){
for (spaces =0; spaces < height - 1 - rows / 2; spaces++){
System.out.print(" ");
}
for (stars = 0; stars < rows; stars++){
System.out.print("*");
}
System.out.println("");
}
for ( rows = height; rows > 0; rows -= 2){
for ( spaces =0; spaces < height - 1 - rows / 2; spaces++){
System.out.print(" ");
}
for ( stars = 0; stars < rows; stars++){
System.out.print("*");
}
System.out.println();
}
输出:
*
***
*****
*******
*********
*********
*******
*****
***
*
答案 0 :(得分:1)
对于你的更新问题,你得到一个无限循环,因为你的for循环
for (rows = height; rows >= 1; rows -= 2)
仅递减行(从1开始),并检查小于。
尝试类似:
X = [0, 2, 3, 4.0, 1, 0, 3, 0, 0, 0, 2, 1, 5, 2, 6, 0, 2.2, 1]
答案 1 :(得分:1)
您的原始代码存在一些问题。
首先,你正在使用它:
System.out.println("*")
而不是:
System.out.print("*")
在Java中,println
和print
是两回事。 println
会自动在字符串末尾添加换行符,而print
则不会。
但是,您不能只将println
更改为print
,因为这样所有输出都会在一行上。每次运行循环时,使用System.out.println()
创建换行符。
您也没有定义rows
,spaces
和stars
(我假设它们没有在别处定义。)您可以在for循环中定义它们,就像这样:
for (int rows = 1; rows < height; rows += 2) {
至于钻石的下半部分,您可以简单地反转for循环并省略一条线(中间线,因为它是由第一个循环创建的。)这是第二个for循环的开始,内容与第一个内容相同:
for (int rows = height - 2; rows > 0; rows -= 2){
不是从0开始,添加2并继续直到我们到达height
,我们从height - 2
开始,减去2,然后继续直到我们达到0。
为什么height - 2
而不是height
?那是因为如果我们使用height
,它将打印一个重复的行。 height - 2
删除一行(副本)并打印下半部分的剩余部分。
以下是完整的固定代码:
for (int rows = 1; rows < height; rows += 2){
for (int spaces =0; spaces < height - 1 - rows / 2; spaces++){
System.out.print(" ");
}
for (int stars = 0; stars < rows; stars++){
System.out.print("*");
}
System.out.println();
}
for (int rows = height - 2; rows > 0; rows -= 2){
for (int spaces = 0; spaces < height - rows / 2 - 1; spaces++) {
System.out.print(" ");
}
for (int stars = 0; stars < rows; stars++){
System.out.print("*");
}
System.out.println();
}
如果有任何不准确或不清楚,请告诉我。
答案 2 :(得分:1)
import java.util.Scanner;
public class diamond {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int i,n,j,k,l=0;
System.out.println("enter number n");
Scanner in=new Scanner(System.in);
n=in.nextInt();
for(i=1;i<=n;i++)
{
for(j=0;j<=n-i;j++)
{
System.out.print(" ");
}
for(k=1;k<=i;k++)
{
System.out.print("*");
}
for(l=2;l<=i;l++)
{
System.out.print("*");
}
System.out.println();
}
for(i=n;i>=1;i--)
{
for(j=0;j<=n-i;j++)
{
System.out.print(" ");
}
for(k=1;k<=i;k++)
{
System.out.print("*");
}
for(k=2;k<=i;k++)
{
System.out.print("*");
}
System.out.println();
}
}
}
答案 3 :(得分:-2)
代码:
for (int i = 1; i < 10; i += 2) {
for (int j = 0; j < 9 - i / 2; j++)
System.out.print(" ");
for (int j = 0; j < i; j++)
System.out.print("*");
System.out.print("\n");
}
for (int i = 7; i > 0; i -= 2) {
for (int j = 0; j < 9 - i / 2; j++)
System.out.print(" ");
for (int j = 0; j < i; j++)
System.out.print("*");
System.out.print("\n");
}
输出:
*
***
*****
*******
*********
*******
*****
***
*