Comparando Variáveis em array

5 respostas
I

ERRO GERADO
Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 6
at poo2.Itamar0700628.main(Itamar0700628.java:69)

=================================================================

Alguem sabe esse mistério???

import javax.swing.*;
/**
 *
 * @author administrador
 */
public class Itamar0700628 {

    private static int qtdDezenas;
    private static String qtdDdezenas1;
    private static int j=0;
    private static int[] dezenasJogo = new int[12];
    private static String[] dezenasJogo1 = new String[12];
    private static int qtJogos=0;
    private static String qtdJogos1;
    private static String dezenasSorteadas1[] = new String[6];
    private static int dezenasSorteadas[] = new int[6];
    private static int i=0;
    private static int[] jogador = new int[200];
    
    public static void main ( String args [ ] ){
            //Ler as dezenas sorteadas
            
            for (i=0; i < dezenasSorteadas.length; i++) {
            
            dezenasSorteadas1[i] = JOptionPane.showInputDialog ( "Informe dezenas sorteadas" );
            dezenasSorteadas[i] = Integer.parseInt(dezenasSorteadas1[i]);
            
            //Imprimir dezenas sorteadas
            System.out.println("as desenas sorteadas foram " +dezenasSorteadas[i]);
            }
            
            //Ler quantidade de jogos validos para o sorteio
            qtdJogos1 = JOptionPane.showInputDialog ( "Informe Quantidade de jogos" );
                        qtJogos = Integer.parseInt(qtdJogos1);
                        System.out.println("a quantidade de jogos foi de " + qtJogos);
                        
            //Ler quantidade de dezenas marcadas em cada cartelas            
            for (i=1; i <= qtJogos; i++) {
                qtdDdezenas1 = JOptionPane.showInputDialog ( "Informe total de dezenas do jogo "+i);
                qtdDezenas = Integer.parseInt(qtdDdezenas1);
                    if (qtdDezenas > 12){
                        JOptionPane.showMessageDialog(null,"Esse valor não pode ser maior que 12");
                        break;
                    }
                //System.out.println("a quantidade de dezenas para o jogo " + i + "foi de " + qtdDezenas);
                
                //Ler cada dezena marcada na cartela
                for (j=1; j <= qtdDezenas; j++) {
                    dezenasJogo1[j] = JOptionPane.showInputDialog ( "Informe dezenas preenchidas para o jogo " + i );
                    dezenasJogo[j] = Integer.parseInt(dezenasJogo1[j]);
            
                    System.out.println("as desenas marcadas foram " + dezenasJogo[j]);
                }
                      
            }
           //Definindo Quantidade de apostadores
            System.out.println("A quantidade de apostadores foi de "+ qtJogos);
           //Verificando quantidade de acerto para cada apostador
            for (i=1; i <= qtJogos; i++) {
                
                //Comparando dezenas jogadas com dezenas sorteadas
                for (j=1; j < dezenasJogo.length; j++) { 
                   if (dezenasJogo[i]==dezenasSorteadas[j]){
                       jogador[i]+= +1;                     
                   }else {
                    System.out.println("nada encontrado");   
                   }
                }System.out.println(dezenasJogo.length); 
            }
                        
            System.exit(0);
	}
}

5 Respostas

Guitar_Men

Esse erro ocorre quando vc tenta acessar uma posição do vetor que não existe… Da uma revisada nos seus loops que percorrem os arrays

Guitar_Men

Acho que provavelmente nessa parte do código

for (j=1; j < dezenasJogo.length; j++) {   
                   if (dezenasJogo[i]==dezenasSorteadas[j]){   
                       jogador[i]+= +1;                       
                   }else {

Vc tenta acessar a posição J de dezenasSorteadas, porém eu vi que esse vetor dezenasJogo vai até 12, então pode ser ai que ele ta estourando o seu array

I

a idéia nesse ponto, é comparar cada item do array desenasJojo com todos os dados do array dezenasSorteadas.

Exemplo:

desenasJogo[1]==dezenasSorteadas[1] ou dezenasSorteadas[2] ou dezenasSorteadas[3] ou dezenasSorteadas[4] …

eu não sou expert nisso, mas acredito que esteja correto, mesmo que o Array desenasJogo contivesse 1000 posições. Ele seria comparado

testa aí pra min. dirrepente estou falando besteira.

Poneis123

Olá Itam, não tenho certeza se estou certo, mas identifiquei algumas falhas.

for (i=1; i <= qtJogos; i++) {   

			//Comparando dezenas jogadas com dezenas sorteadas   
			for (j=1; j < dezenasJogo.length; j++) {   
				if (dezenasJogo[i]==dezenasSorteadas[j]){   
					jogador[i]+= +1;                       
				}else {   
					System.out.println("nada encontrado");     
				}   
			}

System.out.println(dezenasJogo.length);   
		}

-A variavel I e J vc está iniciando com valor 1 , isto esta ignorando a posição 0 da matriz.
-dezenasJogo[] possui 12 posições, dezenasSorteadas[] possui 6 posições. se ele tenta compara um valor de dezenaJogo que não existe em dezenaSorteada o J esta sendo incrementado até 12 - for (j=1; j < dezenasJogo.length; j++) - ai da o erro pois ele tenta compara dezenaJogo[1]==dezenaJogo[6] e essa posição 6 não existe.

Não esqueça que em java as matrizes começa na posição 0. ou seja dezenasSorteadas só vai até dezenasSorteadas[5] (com isto ela tem 6 posições).

Uma solução seria inverter a comparação, compara a matriz menor, com a maior, por exemplo
//Verificando quantidade de acerto para cada apostador   
		for (i=0; i < qtJogos; i++) {   

			//Comparando dezenas sorteadas com as dezenas jogadas   
			for (j=0; j < dezenasJogo.length; j++) {   
				if (dezenasSorteada[i]==dezenasJogo[j]){   
					jogador[i]+= +1;                       
				}else {   
					System.out.println("nada encontrado");     
				}   
			}

			System.out.println(dezenasJogo.length);   
		}

Não sei se o código ta funcional, não testei, verifica ai.
Não entendi o que vc quis fazer quando faz a comparação com sucesso. quando ele faz jogador[i]+= +1;

Abraço.

I

Obrigado a todos pelas dicas.

Meu codigo estava faltando mais um for, e teve o uso indevido como mensionado acima + uso indevido do dezenasJogo.length que foi modificado pelo uso de outra variável

Agora o sistema está com um bug que é o seguinte: quando ponho mais de um jogador ele sobrescreve as informações de preenchimentos de dezenas marcadas. Q estarei resolvendo.

Porém, a comparação de uma Array com outro Array. que era o objetivo do estudo já foi alcançado. e o codigo onde esse item funciona estar a baixo.

import javax.swing.*;
/**6
 * 
 *
 * @author administrador
 */
public class Itamar0700628 {

    private static int qtdDezenas=0;
    private static String qtdDdezenas1;
    private static int g=0,j=0;
    private static int[] dezenasJogo = new int[12];
    private static String[] dezenasJogo1 = new String[12];
    private static int qtJogos=0;
    private static String qtdJogos1;
    private static String dezenasSorteadas1[] = new String[6];
    private static int dezenasSorteadas[] = new int[6];
    private static int i=0;
    private static int[] jogador = new int[200];
    
    public static void main ( String args [ ] ){
            //Ler as dezenas sorteadas
            
            for (i=0; i < dezenasSorteadas.length; i++) {
            
            dezenasSorteadas1[i] = JOptionPane.showInputDialog ( "Informe dezenas sorteadas" );
            dezenasSorteadas[i] = Integer.parseInt(dezenasSorteadas1[i]);
            
            //Imprimir dezenas sorteadas
            System.out.println("as desenas sorteadas foram " +dezenasSorteadas[i]);
            }
            
            //Ler quantidade de jogos validos para o sorteio
            qtdJogos1 = JOptionPane.showInputDialog ( "Informe Quantidade de jogos" );
                        qtJogos = Integer.parseInt(qtdJogos1);
                        System.out.println("a quantidade de jogos foi de " + qtJogos);
                        
            //Ler quantidade de dezenas marcadas em cada cartelas            
            for (i=0; i < qtJogos; i++) {
                qtdDdezenas1 = JOptionPane.showInputDialog ( "Informe total de dezenas do jogo "+i);
                qtdDezenas = Integer.parseInt(qtdDdezenas1);
                    if (qtdDezenas > 12){
                        JOptionPane.showMessageDialog(null,"Esse valor não pode ser maior que 12");
                        break;
                    }
                //System.out.println("a quantidade de dezenas para o jogo " + i + "foi de " + qtdDezenas);
                
                //Ler cada dezena marcada na cartela
                for (j=0; j < qtdDezenas; j++) {
                    dezenasJogo1[j] = JOptionPane.showInputDialog ( "Informe dezenas preenchidas para o jogo " + i );
                    dezenasJogo[j] = Integer.parseInt(dezenasJogo1[j]);
            
                    System.out.println("as desenas marcadas foram " + dezenasJogo[j]);
                }
                      
            }
           //Definindo Quantidade de apostadores
            System.out.println("A quantidade de apostadores foi de "+ qtJogos);
           //Verificando quantidade de acerto para cada apostador
            for (i=0; i < qtJogos; i++) 
            {
                //System.out.println("cont i " +i);
                //Comparando dezenas jogadas com dezenas sorteadas
                
                for (g=0; g < qtdDezenas; g++) 
                {
                    //System.out.println("cont i " +g);
                                
                    for (j=0; j < qtdDezenas; j++) 
                    { 
                        if (dezenasJogo[i]==dezenasSorteadas[j]){
                           jogador[i]= jogador[i]+1;     
                       }
                    }
                } 
                System.out.println("Acerto do jogador " + i + " foi de " +jogador[i]);
                
            }
                        
            System.exit(0);
	}
}

Quem quiser me ajudar resolver o bug aí… fique a vontade. pois hoje, a cabeça ja ferveu. adianto que é no for a baixo da linha //Ler cada dezena marcada na cartela

Criado 11 de abril de 2008
Ultima resposta 11 de abr. de 2008
Respostas 5
Participantes 3