2017-11-18 68 views
0
import java.util.ArrayList; 
import java.util.List; 

public class QueryParser { 
    QueryParameter queryParameter = new QueryParameter(); 
    public static int flag = 0; 

    public QueryParameter parseQuery(String queryString) { 
     queryParameter.setGroupByFields(getGroupByFields(queryString)); 

     queryParameter.setAggregateFunctions(getAggregateFunctions(queryString)); 

     return queryParameter; 
    } 

    private List<AggregateFunction> getAggregateFunctions(String queryString) { 
     List<AggregateFunction> aggregateFunctionList = null; 
     AggregateFunction aggregateFunction; 
     if (queryString.contains("count") || queryString.contains("sum") || queryString.contains("min") 
       || queryString.contains("max") || queryString.contains("avg")) { 
      flag = flag + 1; 
     } 
     return aggregateFunctionList; 
    } 

    private List<String> getGroupByFields(String queryString) { 
     List<String> groupByFieldList = null; 
     if (queryString.contains("group by")) { 
      flag = flag+2; 
     return groupByFieldList; 
    } 
} 

这是我的代码,现在我从另一个类使用 int i = queryParser.flag, 访问标志,但它始终返回0。如何声明标志,这样它会保存从价值观内部方法,也可以从其他类访问。/*如果有人需要更多的细节,请问我会添加更多的细节,我应该写什么,我的主要疑问是只知道我怎么能在另一个班级使用我的国旗,感谢您的耐心*/标志总是返回0到另一个类

+0

欢迎来到SO。 TL; DR;请参阅[如何提问](https://stackoverflow.com/help/how-to-ask):“假装你正在和一位忙碌的同事谈话,并且必须用一句话来概括你的整个问题”。发布最短的代码来展示问题。请参阅:[mcve]。制作mcve也将帮助您调试和隔离问题。你可能会发现问题不在于'flag'的声明中,而是改变其值的逻辑。 – c0der

+0

嗨,你能指出我可以如何改变标志值(仅供参考:我现在减少了代码) – Krishna

+0

减少代码是好的,但它不会使它[mcve] – c0der

回答

-1

MCVE看起来是这样的:

public class QueryParser { 

    public static int flag = 0; 

    void getAggregateFunctions(String queryString) { 

     if (queryString.contains("count") || queryString.contains("sum") || queryString.contains("min") 
       || queryString.contains("max") || queryString.contains("avg")) { 
      flag = flag + 1; 
     } 
    } 

    void getGroupByFields(String queryString) { 

     if (queryString.contains("group by")) { 
      flag = flag+2; 
     } 
    } 

    public static void main(String[] args) { 

     QueryParser q = new QueryParser(); 
     System.out.println(flag); //prints out 0 
     q.getAggregateFunctions("max"); System.out.println(flag); //prints out 1 
     q.getAggregateFunctions("aString"); System.out.println(flag); //prints out 1 
     q.getAggregateFunctions("avgNumber"); System.out.println(flag); //prints out 2 
     q.getGroupByFields("group by"); System.out.println(flag); //prints out 4 
    } 
} 

它可以帮助那些谁想要帮助你,更重要的是:它是一个伟大的调试工具。
进行操作可帮助您隔离问题,并专注于此。
就像在这种情况下一样:您可以看到问题不在标志的声明中,也没有改变其值,但可能与输入值有关。

+0

嘿!感谢队友,我会在下次提问时提问...好例子 – Krishna

+0

该代码在同一班级正确地发布了标志。假设我从另一个类中调用这个类(queryParser),使用int i = queryParser.flag;那么它将显示标志0. – Krishna

+0

您可以通过'QueryParser.flag'获取它的值,或者更好地使它成为非静态并添加一个getter。 – c0der