在java中打印形状

时间:2016-03-10 04:53:44

标签: methods

我想使用递归

从小X的集合中打印此形状大x

这是我的代码

private static void shape(PrintWriter output, int times, int k, int times2) {

    if(times < 0){
        return;
    } else{

        for (int i =0; i<times; i++){          
            if (i==times)
                 output.print("X");
            else if(i==k)
                 output.print("X");
            else
                 output.print(" ");               
        }
        output.println();

        shape(output,times-1,k+1,times2);
    }   
}

但我无法打印请求的形状

3 个答案:

答案 0 :(得分:0)

只需更改

int arr[] = new int[times]

int arr[] = new int[times2]

其中times2是单行的宽度。

然而,更清洁的方式是:

public class InputTest {
    private static void FCITshape(int times, int k,int times2) {
        if (times < 0) {
            return;
        } else {
            for (int i = 0; i <= times2; i++) {
                if (i == times)
                    System.out.print("X");
                else if (i == k)
                    System.out.print("X");
                else
                    System.out.print(" ");

            }
            System.out.println();
            FCITshape(times - 1, k + 1, times2);
        }
    }

    public static void main(String[] args) {
        FCITshape(10, 0, 10);
    }
}

问候。

答案 1 :(得分:0)

随着递归
现在只需致电printX(0, 10);

public static void printX(int x, int l) {
    if (x <= l) {
        if (x < l / 2) {
            for (int i = 0; i < x ; i++) {
                System.out.print(" ");
            }
        } else {
            for (int i = 0; i < l - x; i++) {
                System.out.print(" ");
            }
        }
        System.out.print("x");
        if (x < l / 2) {
            for (int j = 0; j < l - x * 2 - 1; j++) {
                System.out.print(" ");
            }
        } else {
            for (int j = 0; j < (x * 2 - l) - 1; j++) {
                System.out.print(" ");
            }
        }
        if (x != l / 2) {
            System.out.print("x");
        }
        System.out.println();
        printX(x + 1, l);
    }
}

答案 2 :(得分:0)

试试这个。

static void shape(PrintWriter output, int size, int index) {
    if (index >= size)
        return;
    char[] buffer = new char[size];
    Arrays.fill(buffer, ' ');
    buffer[index] = buffer[size - index - 1] = 'X';
    output.println(new String(buffer));
    shape(output, size, index + 1);
}

try (PrintWriter output = new PrintWriter(new OutputStreamWriter(System.out))) {
    shape(output, 11, 0);
}