Bom dia pessoal.
Eu estou começando a mexer com vetores e matrizes, e em um código surgiu uma duvida.
Segue o código abaixo:
import javax.swing.JOptionPane;
import java.text.NumberFormat;
public class Exercicio0905 {
public static void main(String[] args) {
NumberFormat nf = NumberFormat.getCurrencyInstance();
String dadosrelatorio = "";
int nfunc = 0;
double salariobruto = 0, inss = 0, irenda = 0, salarioliq = 0, totalsalb = 0, totalinss = 0, totalirenda = 0, totalsalliq = 0;
while(true){
String st = "Informe o número de funcionários";
st = JOptionPane.showInputDialog(st);
if (st == null){
System.exit(0);
}else if (st.equals("")){
st = "Você deve informar um número";
JOptionPane.showMessageDialog(null, st,"Erro",0);
continue;
}
if (st.equals("0")){
st = "Você deve informar um número maior que zero";
JOptionPane.showMessageDialog(null, st,"Erro",0);
continue;
}
nfunc = Integer.parseInt(st);
String funcs[] = new String[nfunc];
double dadosfunc[][] = new double[nfunc][3];
for (int i = 1; i <= nfunc; i++){
st = "Informe o nome do funcionário";
st = JOptionPane.showInputDialog(st);
if(st == null){
st = "Você deve informar um nome!";
JOptionPane.showMessageDialog(null, st,"Erro",0);
continue;
}else st.trim();
if (st.length() < 2){
st = "Nome deve conter pelo menos 2 caracteres";
JOptionPane.showMessageDialog(null, st,"Erro",0);
continue;
}else funcs[i - 1] = st;
do {
st = "Informe seu salário bruto";
st = JOptionPane.showInputDialog(st);
if (st == null){
System.exit(0);
}else if (st.equals("")){
st = "Você deve informar um salário";
JOptionPane.showMessageDialog(null, st,"Erro",0);
continue;
}else st.trim();
salariobruto = Double.parseDouble(st);
if(salariobruto < 465.00 ){
st = "Salário deve ser maior ou igual a R$ 465.00";
JOptionPane.showMessageDialog(null, st,"Erro",0);
continue;
}
}while(salariobruto < 465.00);
if (salariobruto <= 965.67){
inss = salariobruto*8.0/100;
} else if (salariobruto <= 1609.45){
inss = salariobruto*9.0/100;
}else if (salariobruto <= 3218.90){
inss = salariobruto*11.0/100;
}else if (salariobruto >3218.90){
inss = 354.07;
}
if (salariobruto <= 1434.00){
irenda = 0;
}else if (salariobruto <= 2150.00){
irenda = salariobruto*7.5/100;
}else if (salariobruto <= 2886.00){
irenda = salariobruto*15/100;
}else if (salariobruto <= 3582.00){
irenda = salariobruto*22.5/100;
}else if (salariobruto > 3582.00){
irenda = salariobruto*27.5/100;
}
salarioliq = salariobruto-inss-irenda;
totalsalb += salariobruto;
totalinss += inss;
totalirenda += irenda;
totalsalliq += salarioliq;
dadosfunc [i -1][0]= salariobruto;
dadosfunc [i -1][1]= inss;
dadosfunc [i -1][2]= irenda;
dadosfunc [i -1][3]= salarioliq;
dadosrelatorio += funcs[ i -1] + " - " + nf.format(salariobruto) + " - " + nf.format(inss) + " - " + nf.format(irenda) + " - " +
nf.format(salarioliq) +"\n";
}
String relatorio = "Resumo da folha de pagamento:\n\n\n" + dadosrelatorio + "\n\nTOTAIS: " + nf.format(totalsalb) + " - " +
nf.format(totalinss) + " - " + nf.format(totalirenda) + " - " + nf.format(totalsalliq);
JOptionPane.showMessageDialog(null, relatorio,"Mensagem",1);
break;
}
}
}
Criei uma matriz na linha 32, da maneira que está o código esta funcionando perfeitamente, porém ao começar o código eu fiz assim:
double dadosfunc[][] = new double[nfunc - 1][3];
Pesquisei sobre esse erro, e pelo que li eu estou indicando um lugar que não existe, mas se a matriz começa com [0][0], porque não funcionava e dava o erro “Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 0
at Exercicio0905.main(Exercicio0905.java:98)”.
Espero que entendam que apesar que eu consegui fazer o sistema rodar, não entendi o porque estava dando erro, e eu não quero ser uma máquina que programa dessa maneira porque simplesmente da certo, quero entender…
Fico no aguardo
Desde já agradeço!