Java 递归方法返回并打印字符串的整数

Java 递归方法返回并打印字符串的整数,java,recursion,methods,command-line,return,Java,Recursion,Methods,Command Line,Return,我的递归方法有问题。它将返回并在我的main方法中打印W的X数。X在命令行(arg[0])上是一个正整数,W在命令行(arg[1])上是一个字符串。 因此,对于任何数字,它都会打印字符串那么多次 例如,我的第一个命令行参数是“4”,第二个命令行参数是Hello 输出应打印为字符串: “你好,你好” 我的参数是一个int和一个我相信的字符串,我遇到了问题:(?) 我的自动取款机代码: public static void main(String[] args){ int number

我的递归方法有问题。它将返回并在我的main方法中打印W的X数。X在命令行(arg[0])上是一个正整数,W在命令行(arg[1])上是一个字符串。 因此,对于任何数字,它都会打印字符串那么多次

例如,我的第一个命令行参数是“4”,第二个命令行参数是Hello

输出应打印为字符串:

“你好,你好”

我的参数是一个int和一个我相信的字符串,我遇到了问题:(?)

我的自动取款机代码:

public static void main(String[] args){
      int number = new Integer(0);
      String word = new String("");
      number = Integer.parseInt(args[0]);
      word = args[1];

      String method = recursive1.method1(word);
      System.out.println(method);
   }

   public static String method1(String word, int number) {
      if (number < 0){
         return 0;
      }
      else{
         return word + method1(number-1);
      }
   }

}
publicstaticvoidmain(字符串[]args){
整数=新整数(0);
字符串字=新字符串(“”);
number=Integer.parseInt(args[0]);
word=args[1];

String method=recursive1.method1(word); 系统输出打印LN(方法); } 公共静态字符串方法1(字符串字,整数){ 如果(数字<0){ 返回0; } 否则{ 返回单词+方法1(数字-1); } } }
试试看


你的代码有几个问题。我在必要的地方添加了注释

public static void main(String[] args) {
    ... // skipped previous lines
    // No need to use class name as main is static and method1 is also static.
    String method = method1(word, number); // Call the method with 2 parameters
    System.out.println(method);
}

// With an else - improves readability
public static String method1(String word, int number) {
    if (number == 0) { // If it is zero, return a blank string
        return ""; // return a blank string and not 0(int)
    } else {
        return word + method1(word, number - 1); // method1 requires 2 parameters
    }
}

// Without an else - unnecessary else removed
public static String method1(String word, int number) {
    if (number == 0) { // If it is zero, return a blank string
        return ""; // return a blank string and not 0(int)
    }
    // Removed the else as its really not necessary
    return word + method1(word, number - 1); // method1 requires 2 parameters
}
另一方面,在
main()
方法中有两行真正不必要的代码

  // int number = new Integer(0); // not needed
  // String word = new String(""); // not needed
  int number = Integer.parseInt(args[0]); // Since you're over-writing the value anyways
  String word = args[1]; // Since you're over-writing the value anyways

尝试此代码。需要进行一些更改

public static void main(String[] args){
  int number = new Integer(5); // you can comment this line when providing input from command line
  String word = new String("hello");// you can comment this line when providing input from command line
  number = Integer.parseInt(args[0]);
  word = args[1];

  String method = method1(word,number);
  System.out.println(method);
}

public static String method1(String word, int number) {
  if (number == 0){
     return "";
  }
  else{
     return word + method1(word,number-1);
  }
}
你写道:

int number = new Integer(0);
这最好是:

int number = 0;
或者为什么不呢

int number = Integer.parseInt(argv[0]);
马上?最初的0有什么作用

当然,当你用n个参数定义一个方法时,总是用n个参数调用它

String result = method1(word, number);

有什么问题?错误?请解释。您不能执行
返回0
(整数)当您声明返回
String
+
method1
的方法需要2个参数时,您只能用1调用else分支,不能用一个参数调用method1。@Asia x3:method1需要2个参数…这个答案将解决您的问题hmm,要打印,我是否将其称为:recursive1.method1(字,数)啊,我现在有点明白了,我的基本情况与huhString method=recursive1.method1(单词,数字);System.out.println(方法)非常不一样;@ThanhLe,是的,我需要两个参数递归方法hmmDang,我最大的问题是没有这两个参数:o!另外,谢谢你的注释和代码示例!这对理解它的工作原理很有帮助:)请删除else子句,它不是必需的:)实际上,对于这种代码,
else
是可读性的改进。更清楚地看到,第二种情况仅在
if
不正确时运行。在我看来,在删除
else
之前,这个答案更好。@DavidWallace你能详细说明一下这个问题吗?@DavidWallace是的,这只是一个小检查,我只是想给他一些提示。无论如何,谢谢你也注意到了这一点:)你能不能现在就把它交给+1,因为我需要提高我的评分,以便对一些帖子发表评论。谢谢。哦,没错,我可以声明新变量并解析它,删除不必要的代码行:o
int number = Integer.parseInt(argv[0]);
String result = method1(word, number);