tablica wielowymiarowa w zaleznosci od dlugosci wyrazu

0

Witam,
Mam aplikację ktora mierzy czas pomiedzy poszczegolnymi literami hasła pięć razy i zapisuje je do tablicy. Poczatkowo przyjełam ze hasło musi mieć sztywno 5 znaków, a po naciśnięciu ENTERa przechodzi do kolejnego wiersza (textfielda) i zapis rozpoczyna się na nowo. Chcialabym jednak aby wierszy zawsze bylo jak dotychczas 5 - bo mam 5 textfieldów, jednak aby dlugosc wprowadzanego hasła nie musialabyc ustalona na sztywno. zeby moglobyc to 5 - 8 albo nawet 10 znakow i w zaleznosci od tego tablica by się powiekszala o kolejne kolumny. Ponizej kod zapisu do tablicy 5x5

@Override
    public void keyPressed(KeyEvent e) {
        JTextField src = (JTextField) (e.getSource());

        if (src == th || src == th1 || src == th2 || src == th3 || src == th4) {

            if (obr == 0) {
                wyniki[klik][obr] = e.getKeyChar();
                myTime = System.currentTimeMillis();
                result[klik][obr] = 0;
            }
            if (obr == 1) {
                wyniki[klik][obr] = e.getKeyChar();
                myTime1 = System.currentTimeMillis();
                result[klik][obr] = (System.currentTimeMillis() - myTime) / 10;
                System.out.print("Czas między 1, a 2:" + result[klik][obr] + "\n");
            }

            if (obr == 2) {
                wyniki[klik][obr] = e.getKeyChar();
                myTime2 = System.currentTimeMillis();
                result[klik][obr] = (System.currentTimeMillis() - myTime1) / 10;
                System.out.print("Czas między 2, a 3:" + result[klik][obr] + "\n");
            }

            if (obr == 3) {
                wyniki[klik][obr] = e.getKeyChar();
                myTime3 = System.currentTimeMillis();
                result[klik][obr] = (System.currentTimeMillis() - myTime2) / 10;
                System.out.print("Czas między 3, a 4:" + result[klik][obr] + "\n");
            }
            if (obr == 4) {
                wyniki[klik][obr] = e.getKeyChar();
                result[klik][obr] = (System.currentTimeMillis() - myTime3) / 10;
                System.out.print("Czas między 4, a 5:" + result[klik][obr] + "\n");

                // pętla foreach pobiera tablice jednowymiarowe
                for (long[] tablica1D : result) {
// dopiero pętla wewnętrzna pobiera liczby
                    for (long liczba : tablica1D) {
                        // dla liczb < 10 dodajemy 0 przed cyfrą
                        System.out.print(liczba + ",");
                    }
                }
                System.out.print("Wpusywane litery to:" + wyniki[0][0] + wyniki[0][1] + wyniki[0][2] + wyniki[0][3] + wyniki[0][4]);

            }

            obr++;

            if (e.getKeyCode() == KeyEvent.VK_ENTER) {

                if (klik == 0) {
                    th.transferFocus();
                    obr = 0;
                }
                if (klik == 1) {
                    th1.transferFocus();
                    obr = 0;
                }
                if (klik == 2) {
                    th2.transferFocus();
                    obr = 0;
                }
                if (klik == 3) {
                    th3.transferFocus();
                    obr = 0;
                }
                if (klik == 4) {
0

Zamiast tablicy użyj List, np. ArrayList, z tego co widzę, będzie trochę dodania do środka listy, więc ArrayList jest odpowiednią implementacją.

0

a w przypadku gdyby hasło mogło być tylko pomiędzy 5, a 10 znaków? dodaje obr == 5, obr == 6 i tak do 9, ale co w przypadku gdy mamy tylko 5 liter hasła, co zrobic aby pozostale wartosci zostaly zapisane jako 0.

0

Jeśli masz 5 liter hasła, to po naciśnięciu entera, sprawdzasz wartość zmiennej obr i setujesz na 0 wszystkie elementy tabeli większe lub równe od zmiennej obr

0

dziękuje ale jakbyś mógł pokazać jak to zapisać bo coś chyba nie dokonca łapie :D chodzi o to ze w tej chwili mam obr==4 maksymalnie czyli hasło może mieć maksymalnie 5 liter. załóżmy że dorzucę jeszcze kolejne 5 obr aż do obr==9 ale hasła będę wprowadzać różnej długości 3-5-8-10 literowe i chciałabym aby pozostalr wartosci obr były zerem bo w tym momencie jak dodałam po prostu więcej obr==5 itd to nie działo się nic nawet gdy wposywalam 6 literę nic się nie działo żaden czas nie był liczony

0

Napisz mi, skąd bierzesz klik, obr to rozumiem numer wpisywanego znaku?
Generalnie mam pomysł, żeby najpierw sprawdzać, czy został naciśnięty enter, jeśli tak, to robić, to co robisz, czyli transfer focus, potem wypełnić zerami pozostałe elementy listy, których indeks jest większy równy obr. Plus to co robisz w pętli z wyświetlaniem. Jeśli nie został naciśnięty enter to robisz to co robią twoje metody, ale zamiast pisać to kilka razy stwórz sobie metodę z parametrami, która robi to co te fragmenty kodu.

0

klik to wlasnie enter :) rosnie wraz z naciskaniem kolejnego entera. prawdopodobnie jest w zlym miejscu umieszczony i dlatego zero reakcji gdy wpisuje kolejne litery

0

dodałam do kodu obr==5 wszystko gra do momentu gdy wpisuje haso 6literowe, ale gdy wposuje 5 literowe ta szósta litera, ten szósty czas nie jets zerowany, tylko wpisywany jest tam czas nacisniecia entra ;/

0

Problem tkwi w tym, że twój kod nie jest czytelny najpierw go popraw bo to jakaś masakra

 if (klik == 0) {
                    th.transferFocus();
                    obr = 0;
                }
                if (klik == 1) {
                    th1.transferFocus();
                    obr = 0;
                }
                if (klik == 2) {
                    th2.transferFocus();
                    obr = 0;
                }
                if (klik == 3) {
                    th3.transferFocus();
                    obr = 0;
                }
                if (klik == 4) {
 

Co to jest th ? Dlacego nie dasz to do jakiejś tablicy wtedy można byłoby to skrócić th.get(klik).transferFocus() <-- najlepiej to jeszcze zrefaktoryzować. Komentarze są zbędne.

To też na pewno da się zapisać 50 razy krócej i czytelniej:


        if (src == th || src == th1 || src == th2 || src == th3 || src == th4) {
 
            if (obr == 0) {
                wyniki[klik][obr] = e.getKeyChar();
                myTime = System.currentTimeMillis();
                result[klik][obr] = 0;
            }
            if (obr == 1) {
                wyniki[klik][obr] = e.getKeyChar();
                myTime1 = System.currentTimeMillis();
                result[klik][obr] = (System.currentTimeMillis() - myTime) / 10;
                System.out.print("Czas między 1, a 2:" + result[klik][obr] + "\n");
            }
 
            if (obr == 2) {
                wyniki[klik][obr] = e.getKeyChar();
                myTime2 = System.currentTimeMillis();
                result[klik][obr] = (System.currentTimeMillis() - myTime1) / 10;
                System.out.print("Czas między 2, a 3:" + result[klik][obr] + "\n");
            }
 
            if (obr == 3) {
                wyniki[klik][obr] = e.getKeyChar();
                myTime3 = System.currentTimeMillis();
                result[klik][obr] = (System.currentTimeMillis() - myTime2) / 10;
                System.out.print("Czas między 3, a 4:" + result[klik][obr] + "\n");
            }
            if (obr == 4) {
                wyniki[klik][obr] = e.getKeyChar();
                result[klik][obr] = (System.currentTimeMillis() - myTime3) / 10;
                System.out.print("Czas między 4, a 5:" + result[klik][obr] + "\n");
 

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