Wyjątek niewiadomo z czego wynikający//programowanie wlasnego kalkulatora

0

Hej,
Jestem w trakcie stworzenia kalkulatora. Napotkałem taki oto wyjątek:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 8 out of bounds for length 8
at Calculator.<init>(Calculator.java:58)
at Calculator.main(Calculator.java:72)

Kod:

 import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Calculator implements ActionListener {

    JFrame frame;
    JTextField textField;
    JButton[]numberButtons=new JButton[10];
    JButton[]functionButtons=new JButton[8];
    JButton addButton,subButton,mulButton,divButton;
    JButton decButton,equButton,delButton,clrButton;
    JPanel panel;

    Font myFont=new Font("Ink Free", Font.BOLD,30);

    double num1=0,num2=0,result=0;
    char operator;

    Calculator(){
        frame=new JFrame("Calculator");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(420,550);
        frame.setLayout(null);

        textField=new JTextField();
        textField.setBounds(50,25,300,50);
        textField.setFont(myFont);
        textField.setEditable(false);

        addButton=new JButton("+");
        subButton=new JButton("-");
        mulButton=new JButton("*");
        divButton=new JButton("/");
        decButton=new JButton(".");
        equButton=new JButton("=");
        delButton=new JButton("Delete");
        clrButton=new JButton("Clear");

        functionButtons[0]=addButton;
        functionButtons[1]=subButton;
        functionButtons[2]=mulButton;
        functionButtons[3]=divButton;
        functionButtons[4]=decButton;
        functionButtons[5]=equButton;
        functionButtons[6]=delButton;
        functionButtons[7]=clrButton;

        for(int i=0;i<8;i++){
            functionButtons[i].addActionListener(this);
            functionButtons[i].setFont(myFont);
            functionButtons[i].setFocusable(false);
        }

        for(int i=0;i<10;i++){
            numberButtons[i]=new JButton(String.valueOf(i));
            functionButtons[i].addActionListener(this);
            functionButtons[i].setFont(myFont);
            functionButtons[i].setFocusable(false);
        }

        delButton.setBounds(50,430,145,50);
        clrButton.setBounds(205,430,145,50);

        frame.add(delButton);
        frame.add(clrButton);
        frame.add(textField);
        frame.setVisible(true);
    }
    public static void main(String[] args){
        Calculator calc=new Calculator();
    }

    @Override
    public void actionPerformed(ActionEvent e) {

    }
}

Jakoś nie bardzo rozumiem, dlaczego index 8 jest poza granica. Zreszta na jakakolwiek wartosc niezmienie to i tak wyskakuje ten sam wyjątek.
Pozdrawiam

1
Grantuser napisał(a):

Kod:

        functionButtons[0]=addButton;
        functionButtons[1]=subButton;
        functionButtons[2]=mulButton;
        functionButtons[3]=divButton;
        functionButtons[4]=decButton;
        functionButtons[5]=equButton;
        functionButtons[6]=delButton;
        functionButtons[7]=clrButton;

        for(int i=0;i<8;i++){
            functionButtons[i].addActionListener(this);
            functionButtons[i].setFont(myFont);
            functionButtons[i].setFocusable(false);
        }

        for(int i=0;i<10;i++){
            numberButtons[i]=new JButton(String.valueOf(i));
            functionButtons[i].addActionListener(this);
            functionButtons[i].setFont(myFont);
            functionButtons[i].setFocusable(false);
        }

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 8 out of bounds for length 8

Oznacza zawsze to samo, że dobierasz się do elementu tablicy/listy o indeksie którego nie ma.
Definiujesz 8 buttonow, a w dolnej pętli masz 10 indeksów.

2

W drugim for użyłeś functionButtons, obstawiam, że chciałeś tam użyć tylko numberButtons

1

Wyjątek nie wiadomo z czego wynikający powiadasz.

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 8 out of bounds for length 8
at Calculator.<init>(Calculator.java:58)
at Calculator.main(Calculator.java:72)

Jak dla mnie to wynika z tego, że próbujesz wziąć dziewiąty element z listy która ma tylko osiem elementów.

0
Grantuser napisał(a):

Hej,
Jestem w trakcie stworzenia kalkulatora. Napotkałem taki oto wyjątek:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 8 out of bounds for length 8
at Calculator.<init>(Calculator.java:58)
at Calculator.main(Calculator.java:72)

Jakoś nie bardzo rozumiem, dlaczego index 8 jest poza granica. Zreszta na jakakolwiek wartosc niezmienie to i tak wyskakuje ten sam wyjątek.
Pozdrawiam

Bo maksymalny indeks 8-o elementowej tablicy to 7. Hint - pierwszy element tej tablicy ma indeks 0.

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