我在以下练习中遇到麻烦。

编写一个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/

10-10 03:24