2016-09-27 2 views
0

Создайте функцию для ввода строки и выведите «true» или «false», указав, является ли строка выражением.Java Recursion Expression Checker

Распечатать сообщение, указывающее, является ли строка корректным выражением. Наконец, после обработки всего ввода программа печатает сообщение выхода и останавливается. Следующего правила определяет хорошо сформированное выражение:

.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

В основном вы уронили задание здесь; и сообщая нам, что вы не можете его решить. Но каков ваш вопрос? Что мы делаем для вас домашнее задание? Если вы не понимаете, как интерпретировать это определение expr; Считаете ли вы, что попросите вашего учителя разъяснить? – GhostCat

+0

К сожалению, я не указал правильный код. Будет обновляться прямо сейчас. –

ответ

1

Прежде всего, при условии, что первый символом является 's' недостаточна (и в соответствии с правилом, должен быть верхний регистр 'S' BTW). Это может даже вызвать исключение для пустых строк. Кроме того, он принимает любую строку, начиная с s, включая "so you want this string to match too".

Кроме того, вы не проверяете наличие кронштейнов () около .exp>, что также необходимо сделать. Кроме того, сравнивая String S, которые не компилировать постоянное время с == не работает (см 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))); 
}