【问题标题】:Recursive method return and print Int number of String递归方法返回并打印 String 的 Int 数
【发布时间】:2014-03-03 02:36:02
【问题描述】:

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

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

输出应打印为字符串:

“你好你好你好”

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

我的密码ATM:

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);
      }
   }

}

【问题讨论】:

  • 有什么问题?错误?请解释一下。
  • 当你声明返回String + method1的方法需要2个参数时,你不能做return 0(整数),你在else分支中调用只有1个
  • 你不能只用一个参数调用method1。

标签: java recursion methods command-line return


【解决方案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() 方法中有 2 行非常不必要的代码。

  // 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

【讨论】:

  • 当,我最大的问题是没有这两个参数:o!另外,感谢 cmets 和代码示例!真的有助于理解它是如何工作的:)
  • 并请删除 else 子句,它没有必要:)
  • 实际上,使用这种代码,else 是可读性的提高。可以更清楚地看到第二种情况仅在 if 不正确时运行。在我看来,在删除 else 之前,这个答案会更好。
【解决方案2】:

试试

public static String method1(String word, int number) {
    if (number < 1){
       return ""; // seems that if number is 0 or less, nothing will be printed
    }
    return word + method1(word, number-1);  
}

要打印它:

System.out.println(method1(word, number));

【讨论】:

  • @Asia x3: method1 take 2 params...这个答案将解决您的问题
  • hmmm 和打印我称之为:recursive1.method1(word,number)?
  • 啊啊我现在有点明白了,我的基本情况很不正常啊
  • 字符串方法 = recursive1.method1(word, number); System.out.println(方法);
  • @ThanhLe 是的,我需要两个参数递归方法嗯
【解决方案3】:

你写:

int number = new Integer(0);

最好是这样:

int number = 0;

或者为什么不

int number = Integer.parseInt(argv[0]);

马上?服务于初始 0 的目的是什么?

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

String result = method1(word, number);

【讨论】:

  • 哦,对了,我本可以声明新变量并解析它,删除不必要的代码行:o
【解决方案4】:

试试这个代码。需要进行一些更改。

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);
  }
}

【讨论】:

  • @DavidWallace 你能详细说明这有什么问题吗?
  • @DavidWallace 是的,这只是一张小支票,我只是想给他提示。无论如何,谢谢你也注意到它:) 你现在可以给 +1 吗,因为我需要提高我的评分才能评论一些帖子。谢谢。
猜你喜欢
  • 2014-02-28
  • 2020-08-10
  • 1970-01-01
  • 1970-01-01
  • 2017-08-25
  • 2012-09-21
  • 2019-04-03
  • 2023-03-15
  • 1970-01-01
相关资源
最近更新 更多