【问题标题】:Can someone help me for convert this c# recursive function to java [closed]有人可以帮我将这个 c# 递归函数转换为 java [关闭]
【发布时间】:2016-10-28 11:48:50
【问题描述】:

我有一个 c# 函数,我想将我的函数翻译成 Java。但我在这次谈话中犯了一个错误,我无法弄清楚。这是我的 C# 代码:

public bool ParantezKontrol(string input, int numOpen = 0)
    {
        if (numOpen < 0)
            return false;
        if (string.IsNullOrEmpty(input))
            return numOpen == 0;

        char c = input[0];
        string rest = input.Substring(1);
        if (c == '(')
            return ParantezKontrol(rest, numOpen + 1);
        else if (c == ')')
            return ParantezKontrol(rest, numOpen - 1);
        else
            return ParantezKontrol(rest, numOpen);
    }

我无法实现ParantezKontrol(string input, int numOpen = 0) 这个定义和return numOpen == 0; 这个。

这里是我写的 Java 代码:

public boolean ParantezKontrol(String input, int numOpen){

    if(numOpen<0)   //numOpen=-1 olması durumunda parantez kapatılmayı unutmuştur. Bu durumda fonksiyon false değer gönderir.
        return false;
    if(input==null&&input.isEmpty()){

        return  true;
    }
    char c= input.charAt(0);

    String rest = input.substring(1);

    if(c == '(')
        return ParantezKontrol(rest,numOpen+1); //Girilen metinde '(' varsa fonksiyonu sağdan çağır
    else if (c==')')
        return ParantezKontrol(rest,numOpen-1); // ')' varsa soldan çağır
    else return ParantezKontrol(rest,numOpen);

}

谁能解释我在哪里犯错并解决我的问题

【问题讨论】:

  • input==null&amp;&amp;input.isEmpty() 不能为真。字符串不能为空为空。如果它为空,那么您的代码将抛出异常。
  • 我投票结束这个问题,因为它不是一个代码转换工具
  • C# 版本有return numOpen == 0;,但在你的Java 中你输入return true;
  • @Abion47 in java 我不能像 ParantezKontrol(string input, int numOpen = 0) 那样定义这个函数,因为在 java 中没有像 numopen=0 这样的定义。那是我想到的解决方案
  • @mybirthname 我认为您没有阅读我的问题。我不想让你转换我的代码。我只是被问到一个问题,如果我解决了这个问题。如果我的朋友帮助我,我会很感激的。

标签: java c# android


【解决方案1】:
public final boolean ParantezKontrol(String input)
{
    return ParantezKontrol(input, 0);
}

//Java does not support optional parameters. So you can overload this method
//ORIGINAL public bool ParantezKontrol(string input, int numOpen = 0)
public final boolean ParantezKontrol(String input, int numOpen)
{
        if (numOpen < 0)
        {
            return false;
        }
        if (isNullOrEmpty(input))
        {
            return numOpen == 0;
        }

        char c = input.charAt(0);
        String rest = input.substring(1);
        if (c == '(')
        {
            return ParantezKontrol(rest, numOpen + 1);
        }
        else if (c == ')')
        {
            return ParantezKontrol(rest, numOpen - 1);
        }
        else
        {
            return ParantezKontrol(rest, numOpen);
        }
}

isNullOrEmpty 和 substring 方法在 Java 中是不存在的,所以编写你自己的方法:

public static boolean isNullOrEmpty(String string)
{
    return string == null || string.length() == 0;
}
public static String substring(String string, int start, int length)
{
    if (length < 0)
        throw new IndexOutOfBoundsException("Parameter length cannot be negative.");

    return string.substring(start, start + length);
}

【讨论】:

  • 感谢朋友的帮助
【解决方案2】:

public bool ParantezKontrol(string input, int numOpen = 0) 只是为 numOpen 定义了一个默认参数,允许“懒惰”的程序员只用一个字符串参数来调用 ParantezKontrol - 在你的 Java 代码中,这两个参数都是必需的。

您应该仍然可以使用 return numOpen == 0;

这一行应该是 if(input==null&&input.isEmpty()){

if(input==null || input.isEmpty()){

(注意 C# 方法是 IsNullOrEmpty 不是 IsNullAndEmpty)

【讨论】:

    猜你喜欢
    • 2020-02-25
    • 2018-03-19
    • 2023-04-05
    • 2021-12-24
    • 2012-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    相关资源
    最近更新 更多