Попытка создать строку, которая соответствует регулярному выражению в порядке (от 0 до N размер строки и от 1 до 255 символов ASCII) в JAVA

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

Эти регулярные выражения будут сравнены позже.
Переменная «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;
                      }

            }
        }
    }

И код для инициализации это:

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(); 

1 ответ

  1. Угадывать : одна точная причина для вашей второй петли никогда не останавливать смогла быть

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

    Звучит неубедительно …

    Но, честно говоря, реальный ответ здесь … ваша проблема имеет другую природу. Реальная проблема здесь: вы создали более сложный и очень трудно читать/понимать код! У вас есть многоуровневые вложенные циклы, с условиями и переходами Гото . Не поймите меня неправильно, но вы создали огромный беспорядок здесь! Не удивительно, что вы не понимаете, что делает этот код; и, как следствие, не удивительно, что этот код не делает то, что вы хотите.

    Таким образом, реальный ответ здесь: выбросьте свой код . Сейчас.

    Затем запишите четкую спецификацию ваших требований (ваш вводный текст совсем не ясен); и затем начните реализовывать эти требования. Но вместо того, чтобы просто записывать код, вы должны действительно сосредоточиться на написании кода, который легко читать и понимать . Видите ли, даже если «мы» выясним проблему с вашим текущим кодом, и вы исправите ее — когда вы вернетесь через 2 или 4 недели, чтобы улучшить этот код — вы будете потеряны.

    Короче говоря: код, который вы предоставили, занял, возможно, 1 час, чтобы написать. Чтобы «переосмыслить» то, что он делает через несколько недель, потребуется всего 2,3 часа.