• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z rzekomym przekroczeniem zakresu

Object Storage Arubacloud
0 głosów
116 wizyt
pytanie zadane 22 września 2017 w Java przez Darek554 Użytkownik (980 p.)

Siema,piszę właśnie kalkulator z GUI i mam problem. Piszę kod który będzie działał tak,że kiedy użytkownik wybierze działanie,a liczbą wprowadzoną będzie np. '5.' , '6.' itd. - cokolwiek z kropką na końcu - doda po kropce zero.

Jednakże nie ważne co zrobię w konsoli i tak wywali mi błąd z przekroczeniem zakresu tablicy. Program nawet nie wchodzi do kodu else'a kiedy ma miejsce taka sytuacja.

Kod:

if(e.getSource() == dodaj || e.getSource() == odejmij || e.getSource() == pomnoz || e.getSource() == podziel)
            {  
                zaladowano = false;
                
                if(kropka == true)
                {
                    
                  int pozycja = 0;
                  String zawartosc = ekran.getText();
                  
                  char[] tab = new char[zawartosc.length()];
                  
                  tab = zawartosc.toCharArray();
             
                for(int i = 0; i < zawartosc.length(); i++)
                {
                    if(zawartosc.charAt(i) == '.')
                    {
                        pozycja = i;
                        break;
                    }
                }
                    pozycja++;
                   
                    if(tab[pozycja] >= '0' && tab[pozycja] <= '9')
                    { 
                      liczba = Double.parseDouble(ekran.getText());
                      ekran.setText("");
                      kropka = false;
                      zaladowano = true;
                    }
                    else // Tutaj nawet nie wchodzi
                    {

                         System.out.println("jestem tu"); 

                    }
                }

Już nie mam pomysłu co jest z tym nie tak.

Tutaj błędy:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 2
	at Kalkulator$przyciskFunkcja.actionPerformed(Kalkulator.java:320)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
	at java.awt.Component.processMouseEvent(Component.java:6533)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
	at java.awt.Component.processEvent(Component.java:6298)
	at java.awt.Container.processEvent(Container.java:2236)
	at java.awt.Component.dispatchEventImpl(Component.java:4889)
	at java.awt.Container.dispatchEventImpl(Container.java:2294)
	at java.awt.Component.dispatchEvent(Component.java:4711)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
	at java.awt.Container.dispatchEventImpl(Container.java:2280)
	at java.awt.Window.dispatchEventImpl(Window.java:2746)
	at java.awt.Component.dispatchEvent(Component.java:4711)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
	at java.awt.EventQueue.access$500(EventQueue.java:97)
	at java.awt.EventQueue$3.run(EventQueue.java:709)
	at java.awt.EventQueue$3.run(EventQueue.java:703)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)
	at java.awt.EventQueue$4.run(EventQueue.java:731)
	at java.awt.EventQueue$4.run(EventQueue.java:729)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
BUILD SUCCESSFUL (total time: 6 seconds)

 

1 odpowiedź

0 głosów
odpowiedź 22 września 2017 przez Mateusz51 Nałogowiec (28,180 p.)
wybrane 22 września 2017 przez Darek554
 
Najlepsza
Załóżmy że zawartość to 23. Czyli length() daje nam 3. Wtedy i w pętli for bedze miało wartość 2 gdy wejdzie do ifa. Tam zostanie przypisane 2 do pozycji i zwiększysz pozycjeo jeden czyli 3.

Nastepnie w ife odwołujesz się do tablica[3] a tablice zakładałeś jako new char[3]. Czyli przekroczyłeś zakres bo odwołujesz się do czwartego elementu trzyelementowej tablicy.
komentarz 22 września 2017 przez Darek554 Użytkownik (980 p.)
Klasyczny błąd,po raz n-ty zapominam że numeracja zaczyna się od 0,dzięki.

Tak btw. ten kto ustalił tę debilną konwencję powinien dostać batogiem po dupsku ;P

Podobne pytania

0 głosów
1 odpowiedź 698 wizyt
pytanie zadane 14 czerwca 2019 w Assembler przez jezza Nowicjusz (120 p.)
0 głosów
1 odpowiedź 212 wizyt
0 głosów
0 odpowiedzi 171 wizyt
pytanie zadane 26 października 2017 w Rozwój zawodowy, nauka, praca przez JSystems Nowicjusz (140 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...