我有一个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);
}
有人可以解释我在哪里犯错误并解决我的问题
答案 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);
}