设计函数以输入字符串并输出' true'或者' false' - 告诉字符串是否是表达式。
打印一条消息,告诉该字符串是否是格式正确的表达式。最后,在处理完所有输入后,程序打印退出消息并停止。 以下规则定义了格式良好的表达式:
.expr> = S | I(C)T(.exp>)
这是我的代码:
import java.io.FileNotFoundException;
import java.util.*;
import java.util.Scanner;
public class RecursionExpression {
public static void main(String[] args) throws FileNotFoundException{
System.out.println("Enter the expression statement.");
Scanner keyboard = new Scanner(System.in);
String expr = keyboard.nextLine();
}
public static boolean expression(String n)
{
if (n.charAt(0) == 's')
return true;
else if(n.length() >=6)
{
if (n.substring(0,5) == "I(C)T")
return expression(n.substring(6, n.length()-1));
}
return false;
}
}
答案 0 :(得分:1)
首先,第一个字符为's'
的条件不足(根据规则,它应该是大写的'S'
BTW)。这甚至可以为空字符串抛出异常。此外,它接受以s
开头的任何字符串,包括"so you want this string to match too"
。
此外,您不会检查()
周围的.exp>
括号,这也需要完成。此外,将不是编译时常量的String
与==
进行比较不起作用(参见How do I compare strings in Java?):
public static boolean expression(String n) {
return n.equals("S") ||
(n.startsWith("I(C)T(") && n.endsWith(")") && expression(n.substring(6, n.length()-1)));
}