java.util.regex.Matcher i wyjątek IllegalStateException

0

Mam aplikację SWING i mam problem z użyciem Matcher'a. W projekcie są dwie klasy MainWindow.java czyli GUI i MainWindowLogic.java czyli zachowanie. Po naciśnięciu pewnego buttona MainWindow.java wywołuje metodę

public static void Generuj(String Q_Str, String E_Str, String q0_Str, String d_Str, String F_Str)

z drugiej klasy.
Wywołanie wygląda następująco:

private void Button_GenerujActionPerformed(java.awt.event.ActionEvent evt) {                                               
        MainWindowLogic.Generuj(Text_LiczbaStanow.getText(), Text_LiczbaWejsc.getText(), Text_StanPoczatkowy.getText(), Text_FunkcjaPrzejsc.getText(), Text_StanyAkceptowane.getText());
    } 

Ciało funkcji wygląda tak:


 private static final Pattern pattern_rows = Pattern.compile(".*;");
    private static final Pattern pattern_numbers = Pattern.compile("\\d+");

 public static void Generuj(String Q_Str, String E_Str, String q0_Str, String d_Str, String F_Str) {
        int Q = Integer.parseInt(Q_Str);
        int E = Integer.parseInt(E_Str);
        int q0 = Integer.parseInt(q0_Str);
        
        int d[][];
        d = new int[Q][];
        for (int[] row : d) {
            row = new int[E];
        }
       
        Matcher matcher_rows = pattern_rows.matcher(d_Str);
        Matcher matcher_numbers;
        for (int[] row : d) {
            matcher_numbers = pattern_numbers.matcher(matcher_rows.group());
            for (int cell : row) {
                cell = Integer.parseInt(matcher_numbers.group());
            }
        }
        
        List<Integer> F_List = new ArrayList<>();
        matcher_numbers = pattern_numbers.matcher(F_Str);
        String tmp;
        
        while (!"".equals(tmp = matcher_numbers.group()))
            F_List.add(Integer.parseInt(tmp));
        
        int F[] = new int[F_List.size()];
        
        Iterator<Integer> iterator_F_List = F_List.iterator();
        for (int i = 0; i <F_List.size(); i++) {
            F[i] = iterator_F_List.next();
        }
        
        try {
           myDFA = new DeterministicFiniteAutomaton(Q, E, q0, d, F); 
        }
        catch (WrongStatesNumberException | WrongSymbolsNumberException | WrongSizeTransitionTableException | WrongStateIndexException e) {
        }
        
        
    }

Problem pojawia się przy pierwszym wywołaniu:

matcher_numbers = pattern_numbers.matcher(matcher_rows.group());

a dokładnie

matcher_rows.group()

który generuje wyjątek typu IllegalStateException z wiadomością "No match found", niezależnie od tego jaki string podaję mu do porównania.
Proszę o pomoc w zrozumieniu dlaczego tak się dzieje, co jest nie tak.
Z góry dziękuję.

0
  1. Nie wywołałeś find() ma tym machterze.
  2. Ten kod powinien trafic do tematu http://4programmers.net/Forum/Off-Topic/91494-programistyczne_wtf_jakie_was_spotkaly?start=750 ...
0

To było takie proste... Przepraszam za głupie pytanie. Czy możesz mi powiedzieć dlaczego ten kod jest zły, co powinienem zmienić?

0

Pokaz ten kod swojej mamie albo siostrze i zapytaj czy potrafią powiedzieć co on robi.

1 użytkowników online, w tym zalogowanych: 0, gości: 1