【问题标题】:how to print n number of stars without using loop or condition [duplicate]如何在不使用循环或条件的情况下打印 n 颗星
【发布时间】:2014-03-06 18:19:09
【问题描述】:

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

【问题讨论】:

  • 使用java-8,虽然不是最简单的:System.out.println(String.join("*", new String[n+1]).replace("null",""));
  • @ZouZou 可能更干净一点:System.out.println(Stream.generate(() -> "*").limit(n).collect(joining()));
  • @assylias 那也不错!愿你能简单地做到:Stream.generate(() -> "*").limit(n).forEach(System.out::print);
  • @ZouZou 确实!取决于你是否需要字符串。

标签: java


【解决方案1】:

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

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

这个小sn-p的功劳归this thread中的user102008...

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

【讨论】:

  • 从副本中复制答案的意义何在?
  • @s.bandara - 他们想知道,否则他们可能找不到。如果我没有将功劳归功于它的创造者,你会评价它吗?
  • 由于这可能与家庭作业有关,我会否决它对 OP 或 code trolling (代码 Golf.SE 之外)没有帮助。
  • @MichaelT - 代码拖钓到底是怎样的?它完全按照他们在一行中的要求完成,简洁,相当容易阅读并且几乎没有开销。根据您刚刚链接的定义,它实际上与代码控制相反。
  • 你@RudiKershaw 我明白了。
【解决方案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 获得特殊解决方案:D
  • @T8Z 我添加了一个没有条件的修改示例 - 除了证明一个观点之外,我不确定我是否会推荐它。
  • 对此感到抱歉。太好了。谢谢。
  • @T8Z 无需道歉 - 我错过了部分原始问题。
猜你喜欢
  • 2017-11-08
  • 1970-01-01
  • 2021-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多