2016-11-07 111 views
0

代碼採用值選項選擇2個將要通過生成這些兼容的字符串到正則表達式來填充,有2個正則表達式。嘗試在JAVA中生成與順序中的正則表達式匹配的字符串(從0到N大小的字符串和從1到255個ASCII字符)

那些正則表達式將在稍後進行比較。 「ascii」變量是一個包含ASCCI代碼中每個單個字符的字符串。

現在代碼似乎並沒有結束,當我開始時,我真的不知道我的錯誤究竟在哪裏。

static public void ASCIIString(int option){ 
     String res=""; 
     int n=0; 

cicleG: while(true){ 
      n++; 
      int x=n-1; 
      int []aux = new int [n]; 
      for(int i=0;i<n;i++){ 
       aux[i]=0; 
      } 

cicle:  while(aux[0]<ascii.length()){ 
       for(int i=0;i<n;i++){ 
        res+=(ascii.charAt(aux[i])+""); 
       } 
       aux[x]++; 
       while(aux[x]==ascii.length() && x>0){ 
        aux[x]=0; 
        aux[--x]++; 
       } 
       x=n-1; 
       for (int i = 0; i < Lista1.size(); i++) { 
        if(option==1) 
         if(res.equals(Lista1.get(i))){ 
          continue cicle; 
         } 
        else 
         if(res.equals(Lista2.get(i))){ 
          continue cicle; 
         }  
       } 

       if(option==1) 
         if(res.matches(expression1)){ 
          Lista1.add(res); 
          break cicleG; 
         } 
       else 
         if(res.matches(expression2)){ 
          Lista2.add(res); 
          break cicleG; 
         } 

      } 
     } 
    } 

而對於inicialization的代碼是這一個:

static ArrayList<String> Lista1,Lista2; 
    static String ascii=""; 
    static String expression1="",expression2=""; 
    for (int i = 1; i <= 255; i++) { 
      ascii+=(char)i; 
     } 
    Lista1= new ArrayList(); 
    Lista2= new ArrayList(); 
    expression1=lenguaje1.getText(); 
    expression2=lenguaje2.getText(); 
+0

那麼到目前爲止您採取了哪些診斷步驟?你有沒有在調試器中檢查你的代碼?順便說一下,我強烈建議將此分解爲單獨的方法,而不是使用帶標籤的繼續語句。例如,你沒有給我們一個[mcve] - 你永遠不會聲明'ascii'。 –

+0

像Cicle一直往前走(我正在發送一個字符串在控制檯中顯示)。但我試圖清理它,如果它無法正常工作,我會重新發布它。 –

+0

這並沒有回答你是否試圖在調試器中逐步執行代碼... –

回答

0

猜測:一個晴朗的原因你的第二個循環,永遠不會停止可能是

while(aux[0]<ascii.length()){ 

不聽起來令人信服...

但老實說,r eal答案在這裏...你的問題是不同的性質。真正的問題在這裏:你創建了複雜的超難讀/理解代碼!你有多級嵌套循環,條件和跳轉。不要誤解我的意思,但是你在這裏創建了一個巨大的爛攤子!毫無疑問,你不明白這段代碼在做什麼;因此,這個代碼不是而是也不足爲奇。

因此,這裏的真實答案是:將代碼帶走。現在。

然後寫下一個明確您的要求的規範(您的介紹文本並不完全清楚);然後開始實施這些要求。但是,不要只寫下代碼,而應該專注於編寫易於閱讀和理解的代碼。你會發現,即使「我們」用你當前的代碼來解決問題,並且你修復了它 - 當你在2-4周內回來增強代碼時,你將會迷失方向。

長話短說:您提供的代碼可能需要1小時才能完成。從現在起幾個星期內,「重新理解」它所做的工作將需要2,3個小時。

+0

工作原理如下所示:首先爲單詞的大小創建數組aux,它的初始化值爲0.因此,它知道什麼時候結束,是當數組的第一個位置到達ascii變量中最後一個caracter的值時。這樣它就知道何時移動到下一個字的大小。 –

+0

然後,下一次將最後一個位置重置爲0,然後在使所有可能的ascii組合變爲可能之前增加位置。最後還有一些布爾值可以確保單詞不重複,而下一個匹配。 –

+0

向我解釋這是沒有意義的。如果你真的**知道**你的代碼在做什麼,那麼你就不需要問其他人來幫助你調試它;-)我的意思是:我給了你我真正問題的評估。不要誤解我的意思:當然你可以嘗試修復你當前的代碼。但是不管怎麼說都會有**質量差**,因爲它**不可讀**。你寧願花更多的時間先解決這個問題! – GhostCat