O que tem de errado nessa Lista e no main? quando.. [PROBLEMA RESOLVIDO] vlw galera!

5 respostas
carlosibg

galera criei essa lista aqui, acho q num tem nada de errado nela, mais depois q instancio e tento inserir um Object nela, num vai, num aceita o Object que estou tentando passar! :S

package fila;

public class fila implements interfaceFila{

public Object[] fila;

public int inicio = 0, fim = 0, tamanho = 0;
public fila(){}
public fila(int n)
{

fila = new Object[n];

}
public boolean vazia()
{
    return tamanho <= 0;
}

public void inserir(Object x)  throws Exception
{
    if(tamanho >= fila.length)throw new Exception("Fila cheia");
    else
    {
        fila[fim] = x;
        fim = (fim + 1) % fila.length;
        tamanho++;
    }
}

public Object retirar()throws Exception
{
    if(vazia())throw new Exception("Fila vazia");
    else
    {
     tamanho--;
     Object x = fila[inicio];
     inicio = (inicio +1 ) % fila.length;
     return x;
    }
}

}

Main
|
/

package fila;

public class Main {

public static void main(String[] args) {
  
}

fila r = new fila(5);
Object w = 3;
r.inserir();

}

5 Respostas

carlosibg

no final do main falou eu passa o w

r.inserir(w);

joeroots

Oi cara, eu simulei e pra funcionar eu apenas englobei um metodo perigoso , no caso “inserir()” em um try/catch.

Uma dica que eu sempre faço é: Nunca lanço as excessões pro proximo, sempre as trato nem que seja um simples e.printStackTrace()…pois se der algum erro, você sempre saberá onde é. :wink:

O código modificado segue:

public class Fila{
	public Object[] Fila;
	public int inicio = 0, fim = 0, tamanho = 0;

	public Fila(){
		//Nothing
	}
	public Fila(int n){
		Fila = new Object[n];
	}

	public boolean vazia(){
		return tamanho <= 0;
	}

 //Repare no try/catch
	public void inserir(Object x){

// Eliminei o trowns la do topo e encapsulei 
// A excessão aqui.
		try{

			if(tamanho >= Fila.length){
				throw new Exception("Fila cheia");
			}else{
				Fila[fim] = x;
				fim = (fim + 1) % Fila.length;
				tamanho++;
			}
		}catch(Exception e){
			e.printStackTrace();
		}
	}

	public Object retirar()throws Exception{
		if(vazia()){
			throw new Exception("Fila vazia");
		}else{
			tamanho--;
			Object x = Fila[inicio];
			inicio = (inicio +1 ) % Fila.length;
			return x;
		}
	}



	public static void main(String[] args) {

		Fila r = new Fila(5);
		Object w = 3;
		r.inserir(w);


	}

}
ViniGodoy

A dica é boa, mas cuidado. Há vários casos em que faz sentido subir a exceção. Na verdade, sempre que você não puder trata-la, você deve encaminha-la para fora do método.

O que não pode fazer é o famoso:

try { //Código aqui } catch (Exception e) {}

Isso sim é ignorar solenemente a mensagem de erro. Se você sempre encaminhar para o próximo, e essa exception cair no main ou no seu servlet, ela será devidamente impressa (no console ou no log do servidor) e será tratável.

Mais informações: http://blog.caelum.com.br/2006/10/07/lidando-com-exceptions/

discorpio

Boa tarde a todos.

O erro está simplesmente que voce colocou todo o código fora do bloco do método Main, veja o código que voce escreveu:

public class Main { 
 

   public static void main(String[] args) { 

   }  // Aqui termina o método main    
   
   // Códigos fora do método main e isto vai gerar erro
   fila r = new fila(5); 
   bject w = 3; 
   r.inserir(); 

}

Faço como fez o nosso amigo Joeroots, assim:

public static void main(String[] args) {   
  
        Fila r = new Fila(5);   
        Object w = 3;   
        r.inserir(w);   
  
  
    }
joeroots

A dica é boa, mas cuidado. Há vários casos em que faz sentido subir a exceção. Na verdade, sempre que você não puder trata-la, você deve encaminha-la para fora do método.

O que não pode fazer é o famoso:

try { //Código aqui } catch (Exception e) {}

Isso sim é ignorar solenemente a mensagem de erro. Se você sempre encaminhar para o próximo, e essa exception cair no main ou no seu servlet, ela será devidamente impressa (no console ou no log do servidor) e será tratável.

Mais informações: http://blog.caelum.com.br/2006/10/07/lidando-com-exceptions/

É realmente as vezes precisamos lançar a excesão para o próximo, acho que vi isso em um tutorial JAVA+SQl.

Sobre o :

try { //Código aqui } catch (Exception e) {}

Sim é muito perigoso, sempre que uso um try / catch, sempre utilizo o printStackTrace para saber de onde esta vindo o erro.

Brigado pessoal por salientar esses detalhes.

Cya.

Criado 14 de julho de 2010
Ultima resposta 14 de jul. de 2010
Respostas 5
Participantes 4