2014-02-18 4 views
0

То, что я пытаюсь сделать, это включить методы интерфейса для выполнения задачи с учетом переменных внутри строки. Строка, которую я даю, «s» может быть заполнена цифрами, +, - и *. Целочисленный возврат довольно прост, так как все, что я делаю, - это метод целочисленного интерфейса этого int. Однако для остальных 3 символов мне нужно рекурсивно включить метод поиска левого и правого узлов. Я отправил свой код ниже ...Parsing Java String type Ошибка

public static Expression parseString(String s) { 
     String[] parse = s.split("\\s+"); 
     String[] parsecopy; 
     Expression exp1; 
     Expression exp2; 

     if(s == null) { 

      return null; 
     } 

     if(parse[0].equals("+")) { 
      exp1 = parseString(parse[0]); 
      parsecopy = Arrays.copyOfRange(parse, 2, parse.length); 
      exp2 = parseString(parsecopy); 
      return new AddExpression(exp1, exp2); 
     } 
     else if() { 

Проблема - Так что мой код создает копию исходной строки, чтобы найти следующий элемент в этой строке. Я делаю это, используя функцию Array, copyOfRange(). Однако, когда я хочу вызвать exp2 = parseString (parsecopy), я получаю сообщение об ошибке, потому что parseString принимает строковый аргумент, который должен иметь тип String []. Причина, по которой я пытаюсь получить parsecopy вместо parsecopy [0], состоит в том, что parsecopy не создаст бесконечный цикл, и я действительно смог бы выполнить итерацию по строке.

Error code - The method parseString(String) in the type Parse is not applicable for the arguments (String[]) 

ответ

0
if(parse[0].equals("+")) { 
      exp1 = parseString(parse[0]); 
      parsecopy = Arrays.copyOfRange(parse, 2, parse.length); 
      exp2 = parseString(parsecopy); 
      return new AddExpression(exp1, exp2); 
     } 

exp1 = parseString (синтаксический анализ [0]);

Вы делаете рекурсивный вызов здесь.

+0

проблема заключается в том, что я получаю бесконечный цикл while в parse [0] – user2908101

+0

, и для этого требуется, чтобы я делал parsecopy [0] вместо замены parsecopy – user2908101

0

Поскольку параметр вы передаете раскол является регулярным выражением, вы можете просто сделать:

String[] ss = "12121+34234 *23423 -123123 *123123-12312+1231231-123123".split("\\s?[\\+\\-\\*]\\s?"); 

таким образом вы разделить вашу строку, где вы получили +, -, или * (возможно, с пробелом после или до).

И пожалуйста нуль-проверка строки перед тем разбить его: D

Надеется, что это помогает.

0

Кажется, что вы хотите проверить разбор [1], равный «+», а не синтаксический анализ [0]. Вы могли бы ожидать 1 + 2, а не + 1 2.