有人可以帮助我将这个c#递归函数转换为java

时间:2016-10-28 11:48:51

标签: java c# android

我有一个c#函数,我想将我的func转换为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);

}

有人可以解释我在哪里犯错误并解决我的问题

2 个答案:

答案 0 :(得分:0)

public bool ParantezKontrol(string input,int numOpen = 0)只定义numOpen的默认参数,允许&#34; lazy&#34;程序员只使用字符串参数调用ParantezKontrol - 在Java代码中,始终需要这两个参数。

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

此行应为if(input == null&amp;&amp; input.isEmpty()){

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

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

答案 1 :(得分:0)

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