2017-11-18 8 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