Erro na compilação

8 respostas
andrepm

Estou obtendo o seguinte problema na hora de compilar meu código:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException

public int j;
    public String NomeJogadorVet[] = new String[j];
    public int 	  NumJogadorVet[] = new int[j];
public Servidor() throws RemoteException {
    	NumJogadorVet[0] =  0 ;
    	NomeJogadorVet[0] = "";
    }
public void juntar(Notificar n, String name) throws RemoteException {
    	

    	for (j=0;j>3;j++)
		// My - Incrementa o contador de jogadores -> NumJogador
    	
       	NumJogadorVet[j] = j;
    	NomeJogadorVet[j] = name;
		
		serverList.add(n);	// Valor de n :  
		System.out.println ("O Cliente "+ name+ " juntou-se em \nURL : "+n);
		
		serverList.incCounter();
		// Informar aos outros clientes que um novo usuário esta conectado
		
		for (Iterator i = serverList.getCollection().iterator();
				 i.hasNext();) {
			Notificar client = (Notificar)i.next();
			client.JuntarMensagem(name, NumJogadorCont );
			
		}
		
		serverList.decCounter();

Estes são os trechos do código em que e eu utilizo o vetor. Quando eu altero o tamanho dele para um número, ele compila normalmente, mas quando eu torno a utilizar uma variável ele dá este problema. Alguém poderia me ajudar a entender o que está havendo por favor?

8 Respostas

War_Paz
for (j=0;j>3;j++)

Isso não vai executar nada

andrepm

Não entendi, pq?

War_Paz

Vou usar um código meu pra explicar melhor:

public void inf(){ int contagem = 0; for(int i = 0; i<10; i++){ contagem++; System.out.println(contagem); } }

O que o meu loop for diz é:

O inteiro “i” é igual a zero. Enquanto “i” for menor que dez, adicione 1 a “contagem” e imprima a contagem. Ao final, adicione 1 a “i”.

No seu código, “j” inicia com valor 0, e enquanto “j” for maior que 3, deve-se executar o código e então adicionar 1 a “j”. Porém, já na primeira vez que o loop deva ser executado, “j” é menor que 3, e o loop não será executado

andrepm

Ah sim obrigado, viajei ali mesmo, mas mesmo com isso o problema na compilação permanece :\

War_Paz

Pode postar mais do seu código, tipo, completo?

Se não se sentir seguro de postá-lo aqui, me envie por mensagem particular

Also, desculpe-me qualquer demora, minha internet está péssima hoje

andrepm
import java.rmi.*;
import java.rmi.registry.LocateRegistry;
import java.rmi.server.*;
import java.lang.*;
import java.util.*;

public class Servidor extends UnicastRemoteObject implements ChatInterface {
    

    private ServerList serverList = new ServerList();
    public Random myRandom = new Random();
    
    public int NumJogadorCont = 0;  
    public int Num_X ;			
    public boolean Acertou = false;
    public boolean IniciaJogo = false;
    public int j;
    public String NomeJogadorVet[] = new String[j];
    public int 	  NumJogadorVet[] = new int[j];
    private String lado;
    private String naipe;
    public carta[] carta; 
    public int atual; 
    public final int quantidade = 52; 
    public Random aleatório; 

    

    public Servidor() throws RemoteException {
    	NumJogadorVet[0] =  0 ;
    	NomeJogadorVet[0] = "";
    }
    

    public void NumAleatorio() {
      	// Gerar inteiros de 1 a m (Outra forma)
	  	int m = 10;
	  	Num_X = myRandom.nextInt(m) + 1; 
	  	System.out.println ("O valor de X = "+ Num_X + "\n");
    } 

    public void MostrarMenuCliente()throws RemoteException {
    	
    }
    
    
    public void juntar(Notificar n, String name) throws RemoteException {
    	

    	for (j=0;j<3;j++)
		// My - Incrementa o contador de jogadores -> NumJogador
    	
       	NumJogadorVet[j] = j;
    	NomeJogadorVet[j] = name;
		
		serverList.add(n);	// Valor de n :  
		System.out.println ("O Cliente "+ name+ " juntou-se em \nURL : "+n);
		
		serverList.incCounter();
		
		
		for (Iterator i = serverList.getCollection().iterator();
				 i.hasNext();) {
			Notificar client = (Notificar)i.next();
			client.JuntarMensagem(name, NumJogadorCont );
			
		}
		
		serverList.decCounter();
    }

    public void conversar(String name, String s)
            throws RemoteException {
		serverList.incCounter();
		for (Iterator i = serverList.getCollection().iterator();
				 i.hasNext();) {
			Notificar client = (Notificar)i.next();
			client.EnviarMensagem(name,s);
		}
		serverList.decCounter();
    }
    public synchronized void deixar(Notificar n, String name) throws RemoteException {
    	serverList.remove(n);
    	
    	serverList.incCounter();
    	for (Iterator i = serverList.getCollection().iterator();
				 i.hasNext();) {
			Notificar client = (Notificar)i.next();
			client.SairMensagem(name);
		}
		serverList.decCounter();
		System.out.println ("O Cliente  "+ name+"  Deixou o Chat\n");
		
		// My - Decrementa numetro de Jogadores
		NumJogadorCont --;
    }

    public static void main(String[] args) {
         	try { 
            LocateRegistry.createRegistry(1099);
            
			Servidor server = new Servidor();
            
			
			Naming.rebind("rmichat", server);
			System.out.println ("Servidor Pronto!");
		}
		catch (java.net.MalformedURLException e) {
			System.out.println("nome da URL mal formado para Servidor de Mesagem "
			    + e.toString());
		}
		catch (RemoteException e) {
			System.out.println("Erro de comunicação" + e.toString());
		}
    }

    public void baralho () throws RemoteException {
	  
	       String lado[] = {"Dois", "Tres", "Quatro", "Cinco", "Seis", 
	          "Sete", "Oito", "Nove", "Dez", "Valete", "Dama", "Rei", "As" };     
	       String naipe[] = { "Espadas", "Coração", "Paus", "Ouro" };      
	       carta = new carta[quantidade]; // cria array de objetos Card 
	       atual = 0; // índice de carta atual 
	       aleatório = new Random(); // cria gerador de número aleatório 
	  
	       // preenche baralho com objetos Card                         
	       for ( int count = 0; count < carta.length; count++ ){         
	          carta[ count ] =                                          
	             new carta( lado[ count % 13 ], naipe[ count / 13 ] ); 
	       }   } 
    
   public carta distribui () throws RemoteException{
      // determina se ainda há Cards a ser distribuídos 
      if ( atual < carta.length ) 
         return carta[ atual++ ]; 
      else
    	  System.out.println("Não há cartas para serem distribuídas");
         return null;
         //aqui implementar a distribuição da carta para jogador
   } 
   
   public void embaralhar () throws RemoteException{
	   //aqui implementar embaralhar as cartas dentro do array
   }
   
   public void trocar () throws RemoteException{
	  //aqui implementar a troca de cartas quando o jogador solicitar 
   }
   
   public void encerrar () throws RemoteException{
	   //aqui implementar o término da participação do jogador quando solicitar
   }
   }

Esta é a classe principal.

Tudo bem, agradeço desde já pela ajuda!

Henrique_Moraes

O erro acontece aqui amigo

public int j;  
public String NomeJogadorVet[] = new String[j];  
public int    NumJogadorVet[] = new int[j];

você nao inicia a variável j, tente assim para testar se corrigirá o problema:

public int j=10;  
public String NomeJogadorVet[] = new String[j];  
public int    NumJogadorVet[] = new int[j];
andrepm

Funcionou, muito obrigado pessoal.

Criado 15 de novembro de 2012
Ultima resposta 15 de nov. de 2012
Respostas 8
Participantes 3