[英]Recursive method return values in asterisks
我试图创建一个返回值的递归方法,并在我的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;
}
}
递归方法具有两个特征:
您的asterisks
方法不满足所有这些要求。 由于这看起来像是家庭作业,因此我仅提供有关此方法应如何的解释,实现将由您执行:
String
而不是Integer
。 该String
将包含所有需要的*
。 number
值为1的地方。 number
大于1,则应返回一个星号,并使用整个结果所需的其余星号调用asterisks
方法的结果。 问题在这里:
for(int i = 0; i < number; i++){
return i;
}
此循环仅运行一次,它将立即返回i =0。您不希望那样。 使它在每次迭代时都在您的asterisks1
变量后附加一个*,然后在循环完成后,将asterisks1
返回给调用者并进行打印。
同样,仅是仅供参考,此方法也不是递归的。 根据定义,递归方法在某个时候会自行调用。
要递归地执行它,您必须自己调用自身。 例如 :
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);
}
}
}
您可能希望递归调用星号函数,并返回已构建的星号字符串,如下所示:
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);
}
}
可以做为
public static String asterisks(int n){
return (n==1)?"*":asterisks(n-1)+"*";
}
注意:返回类型为字符串
编辑:对于n <= 0
它不打印任何内容
public static String asterisks(int n){
return (n<=0)?"":asterisks(n-1)+"*";
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.