程序运行时形状错误

时间:2014-12-08 15:57:49

标签: java drjava

import java.util.Scanner;
public class Ideone
{

    public static void main(String[] args) 
    {
        int reader;
        Scanner kBoard = new Scanner(System.in);
        do
        {
            System.out.println("Insert a number of rows: ");

                reader = kBoard.nextInt();
                printDiamond(reader); 


        }while(reader != 0);

    }

    public static void printWORD(int n)
    {
        if(n >= 1)
        {
          System.out.print("SAMPLE");
            printWORD(n - 1);
        }
    }

    public static void printTopTriangle(int rows)
    {
        int x = 1;
        for(int j = (rows - 1); j >= 0; j--,x +=2)
        {
            printSpaces(j);
            printWORD(x);
            System.out.print("\n");
        }
    }

    public static void printSpaces(int n)
    {
        if(n >= 1)
        {
            System.out.print(" ");
            printSpaces(n - 1);
        }
    }

    public static void printBottomTriangle(int rows, int startSpaces)
    {
        int x = 1 + (2*(rows - 1));
        for(int j = startSpaces; j <= (rows) && x > 0; j++,x -=2)
        {
            printSpaces(j);
            printWORD(x);
            System.out.print("\n");
        }
    }
    public static void printBottomTriangle(int rows)
    {
        int x = 1 + (2*(rows - 1));
        for(int j = 0; j <= (rows - 1) && x > 0; j++,x -=2)
        {
            printSpaces(j);
            printWORD(x);
            System.out.print("\n");
        }
    }

    public static void printDiamond(int rows)
    {
        printTopTriangle((int)rows/2 + 1);
        printBottomTriangle((int)rows/2, 1);
    }
}

我的程序应该显示由“SAMPLE”一词组成的钻石形状。但是当我运行它时,它会显示太空船的形状。如何修复此错误,以便使用“SAMPLE”一词打印出完美的Diamond?

3 个答案:

答案 0 :(得分:0)

由于“SAMPLE”(6个字符)的大小,你必须缩进System.out.print(" ");(即6个空格不是1)。

Runnable demo:http://ideone.com/JHTU6C

注意:我没有修改任何其他内容(您可能需要check if an int exists才能使用nextInt()

答案 1 :(得分:0)

如果您使用“*”或任何其他字符更改“SAMPLE”,则会获得菱形。您获得了太空飞船的形状,因为您没有在printSpaces方法中放置足够的空间。空格数应该接近printWORD方法中打印的字符数。在printSpaces方法中放置5或6个空格,你会得到一些接近钻石的东西。

答案 2 :(得分:0)

按如下方式更改这些方法:

public static void printTopTriangle(int rows)
   ...
   printSpaces(j*6);



public static void printBottomTriangle(int rows, int startSpaces)
   ...
   printSpaces(j*6);

注意:6是常量SAMPLE

的长度