2016-11-07 15 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

相关问题