如何在不使用循环或条件的情况下打印n个星星

时间:2014-03-06 18:19:10

标签: java

假设我们给出n的运行时间值,我们想在一行中打印n个星号而不使用循环和/或条件。我们如何在java中做到这一点?

2 个答案:

答案 0 :(得分:2)

您可以使用递归打印出星号,代码如下:

public class RecursiveStars {

    public static void main(final String[] args) {
        printStar(5);
    }

    /**
     * 
     * @param i
     *            the number of stars to print
     */
    private static void printStar(final int i) {
        if (i > 0) {
            System.out.print('*');
            printStar(i - 1);
        }
    }

}

如果你想避免这种情况,你仍然可以使用递归但是通过触发ArithmeticException来突破循环。 (这太可怕了,但确实符合你的要求。)

public class RecursiveStars {

    public static void main(final String[] args) {
        try {
            printStar(5);
        } catch (final ArithmeticException e) {
            // Ignore
        }
    }

    /**
     * 
     * @param i
     *            the number of stars to print
     */
    private static void printStar(final int i) {
        final int triggerException = 1 / i;
        System.out.print('*');
        printStar(i - 1);
    }
}

答案 1 :(得分:1)

嗯,这是一个可以使用的巧妙小技巧。

System.out.println(new String(new char[n]).replace("\0", "*"));

该小片段的归功于this thread ...

中的user102008

基本上,您使用带有[n]索引的新char数组创建新字符串。在未指定值的情况下创建新数组时,将给出默认值。默认字符为'\0'(空字符)。因此,通过在创建的字符串上使用replace(),您可以使用您喜欢的任何char / String替换该字符的所有实例(您已指定的数量)。