假设我们给出n的运行时间值,我们想在一行中打印n个星号而不使用循环和/或条件。我们如何在java中做到这一点?
答案 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
替换该字符的所有实例(您已指定的数量)。