2014-10-08 3 views
0

Может кто-нибудь взглянуть на мой код и попытаться помочь мне разобраться в этом? это приложение regex, которое анализирует запросы командной строки пользователя.Java scoping issue

public class InterpretCommand { 


    public static void main(String[] args){ 

     String a; 

     Command c = new Command(); 

     java.util.Scanner reader = new Scanner(System.in); 
     System.out.println("Enter command: "); 
     a = reader.nextLine(); 

     //String to be scanned is the user input 
     String line = a; 
     //identifies the order command 
     String pattern1 = "(?<=(-)([o]\\s)).*"; 
     //identifies the filter command 
     String pattern2 = "(?<=(-)([f]\\s)).*"; 

     //create pattern objects 
     Pattern r1 = Pattern.compile(pattern1); 
     Pattern r2 = Pattern.compile(pattern2); 

     //create matcher object 
     Matcher m1 = r1.matcher(a); 
     Matcher m2 = r2.matcher(a); 

     //for Order match 
     if (m1.find()){ 
      String s1 = m1.group(0); 
      System.out.println(s1); ** this works ** 
      System.out.println(c.returnActions1(s1)); **says print not applicable for arguments** 

     } 
     else if (m2.find()){ 
      String s2 = m2.group(0); 
      System.out.println(s2); **this works** 
      System.out.println(c.returnActions2(s2)); **says print not applicable for arguments** 
     } 
     else{ 
      System.out.println("No match for given input"); 
     } 

    } 

    public class Command { 

      String a; 

      public void returnActions1(String s1){ 

       String[] commands = s1.split(","); 

       for(int i=0; i<commands.length; i++){ 

        if(commands[i].equals("TITLE")){ 
         //SELECT "TITLE" from <dataframe> 
       } 
        else if(commands[i].equals("DATE")){ 
         //SELECT "DATE" from <dataframe> 
        } 
      } 
     } 

      public void returnActions2(String s2){ 

       String[] commands = s2.split(","); 

       for(int i=0; i<commands.length; i++){ 

        if(commands[i].equals("TITLE")){ 
         //ORDER <dataframe> by "TITLE" 
       } 
        else if(commands[i].equals("DATE")){ 
         //ORDER <dataframe> by "DATE" 
        } 
       } 
      } 
    } 


} 

Любые мысли о том, что я испортил? Я уверен, что Im не сможет правильно отобразить мои переменные или, может быть, просто создать их в целом. проблема возникает, когда я передаю свои основные переменные другим методам класса в main.

+2

какая проблема возникает? Опишите проблему немного больше. – Braj

+0

Является ли это намеренным, что Command является внутренним классом? – fvu

+0

Команда не является внутренним классом - ее только, как она копируется из Eclipse. – pascale

ответ

1

Предполагая, что вы на самом деле хотите командованию быть внутренний класс:

Command c = new Command(); 

не может скомпилировать с ошибкой

error: non-static variable this cannot be referenced from a static context 

решений Command static будет заботиться об этой проблеме.

Затем

System.out.println(c.returnActions1(s1)); 

не может скомпилировать с ошибкой

error: 'void' type not allowed here 

который является логическим следствием определения returnActions в

public void returnActions1(String s1) { 

Как я понятия не имею, что вы на самом деле хочу сделать в этом методе, я могу предложить только изменить его тип возврата

public String returnActions1(String s1) { 

и добавить оператор возврата, возвращающий все возвращаемые методы.

+0

Команда не является внутренним классом - именно так я копирую и вставляю ее из Eclipse (новый класс, новая вкладка). извините – pascale

+0

Я могу заверить вас, что это внутренний класс, но это просто означает, что у вас не будет первой проблемы. Вторая проблема остается прежней. – fvu

+0

«Метод println (boolean) в типе PrintStream не применим для аргументов (void)» – pascale