我在以下练习中遇到麻烦。
编写一个starString方法,该方法接受一个整数参数n,并返回一个2n长(即2表示n次幂)的星号(星号)。例如:
Call Output Reason
starString(0); "*" 2^0 = 1
starString(1); "**" 2^1 = 2
starString(2); "****" 2^2 = 4
starString(3); "********" 2^3 = 8
starString(4); "****************" 2^4 = 16
如果传递的值小于0,则应该抛出IllegalArgumentException。
我已经尝试过了,但是我正在寻找一种将字符串“ *”相乘多次的方法。 PD:我不能使用.repeat
我一直坚持将2的值赋予n次方。如我所试
int x = (int)Math.pow(2,(n));
但我不知道该怎么办。
public static String starString(int n) {
if(n<0){
throw new IllegalArgumentException("No negative values allowed");
}
if(n==0){
return "*";
}else{
return starString(0) + starString(n-1);
}
}
test #1:starString(0)
return:"*"
result: pass
test #2:starString(1)
return:"**"
result: pass
test #3:starString(2)
expected return:"****"
your return:"***"
result: fail
test #4:starString(3)
expected return:"********"
your return:"****"
result: fail
test #5:starString(4)
expected return:"****************"
your return:"*****"
result: fail
test #6:starString(-1)
exp. exception:IllegalArgumentException
your exception:IllegalArgumentException on line 3: No negative values allowed
result: pass
最佳答案
这将起作用,尽管它将炸毁较大的n。
public static String starString(int n) {
if(n<0){
throw new IllegalArgumentException("No negative values allowed");
}
if(n==0){
return "*";
}else{
return starString(n-1) + starString(n-1);
}
}
显然您可以使用2 ^ n
public static int twoToN(int n) {
if(n<0){
throw new IllegalArgumentException("No negative values allowed");
}
if(n==0){
return 1;
}else{
return 2* twoToN(n-1);
}
}
关于java - 使用递归打印字符串n次,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56092864/