我正在尝试创建一个返回值的递归方法,并在main方法中打印该值。我很困惑如何在main()中返回并打印一行X星号(** ..)
X是命令行上的整数
例如,命令行参数是5.
它应该输出到:*****
到目前为止我的代码:
public static void main(String[] commandlineArguments){
if(commandlineArguments.length == 0){
System.out.println("Please enter a least one commandline!");
}
else{
Integer number = new Integer(0); //initialize number
try{
Integer x = Integer.parseInt(commandlineArguments[0]);
}
catch(NumberFormatException exception){ //NumberFormatException
System.out.println(exception+" is not a integer!");
System.exit(1); //end program
}
Integer num1 = recursiveMethods.asterisks(number); //A (return address)
System.out.println(num1);
}
}
public static Integer asterisks(Integer number){
String asterisks1 = "*";
for(int i = 0; i < number; i++){
return i;
}
return number;
}
}
答案 0 :(得分:3)
递归方法有两个特征:
您的asterisks
方法无法满足这些要求。由于这看起来像家庭作业,我只会提供有关该方法应该如何的解释,实施将是你的:
String
而不是Integer
。此String
将包含所需的所有*
。number
的值为1的地方。number
大于1,那么您应该返回一个星号,并使用剩下的星号调用asterisks
方法,结果需要整个结果。答案 1 :(得分:0)
问题在于:
for(int i = 0; i < number; i++){
return i;
}
这个循环只运行一次,它会立即返回i = 0.你不希望这样。在每次迭代时将它附加到asterisks1
变量,然后在循环结束后,将asterisks1
返回给调用者并打印出来。
另外,仅仅是FYI,这种方法不是递归的。根据定义,递归方法在某些时候调用自己。
答案 2 :(得分:0)
要递归地执行它,你必须自己调用它自己。例如:
public static void main(String[] commandlineArguments){
if(commandlineArguments.length == 0){
System.out.println("Please enter a least one commandline!");
}
else{
Integer number = new Integer(0); //initialize number
try{
Integer x = Integer.parseInt(commandlineArguments[0]);
}
catch(NumberFormatException exception){ //NumberFormatException
System.out.println(exception+" is not a integer!");
System.exit(1); //end program
}
recursiveMethods.asterisks(number); //A (return address)
}
}
public static void asterisks(Integer number) {
if(number == 0)
return;
else {
System.out.print("*");
asterisks(number - 1);
}
}
}
答案 3 :(得分:0)
您可能希望以递归方式调用星号函数,并返回构建的星号字符串,如下所示:
public static void main(String[] commandlineArguments) {
if (commandlineArguments.length == 0) {
System.out.println("Please enter a least one commandline!");
} else {
Integer number = new Integer(0); // initialize number
try {
number = Integer.parseInt(commandlineArguments[0]);
} catch (NumberFormatException exception) { // NumberFormatException
System.out.println(exception + " is not a integer!");
System.exit(1); // end program
}
String asterisk = asterisks(number); // A (return address)
System.out.println(asterisk);
}
}
public static String asterisks(Integer number) {
if (number == 0) {
return "";
} else {
return "*" + asterisks(number - 1);
}
}
答案 4 :(得分:0)
可以完成,
public static String asterisks(int n){
return (n==1)?"*":asterisks(n-1)+"*";
}
注意:返回Type是String
编辑:对于n <= 0
,它不会打印任何内容
public static String asterisks(int n){
return (n<=0)?"":asterisks(n-1)+"*";
}