Erro: missing return statement, como resolver?

12 respostas
tiidle

Pessoal, espero que possam me ajudar… Eu criei o seguinte código:

public String emitePassageiro() { int i; for (i = 0; i < qtdePassageiro; i++) return(pa[i].emitePassageiro()); }

Bem, esse método retorna um String. pa[] é um vetor do tipo Passageiros (que é uma outra classe…). emitePassageiro também é um método de outra classe, e esse método retorna um String. Eu preciso retornar todos os passageiros que estão no vetor pa[], mas porque dá erro missing return statement? Como posso resolver? Grato!

12 Respostas

peczenyj

Vc pretende retornar quantas strings?

Vc sabe que só pode retornar uma, certo?

E vc sabe que, se qtdePassageiro; for 0, não há return em vista.

Pense nisso :wink:

tiidle

Bem, eu não sabia que só poderia retornar uma… Então como faço para imprimir todas as informações. Por exemplo, e se o vetor tiver 10 posições, como faço?!

F

Crie uma variável e concatene os valores do vetor, mais ou menos assim:

String [] teste = new String[] {"Olá", "sou", "uma", "String"};
String tela = "";

for(int i = 0; i < teste.length; i++){

 tela = tela + teste[i];

}
return tela; //O valor de tela será: Olá sou uma String.
W

afinal voce so quer imprimir um resultado na tela ou quer retornar todos os dados pra alguem ?
se for se imprimir e so iterar pelo vetor e sair imprimindo sem retornar nada…
se quizer retornar e so voce retornar o vetor inteiro invez de retornar strings…

ai quem chamou o metodo faz oque bem intender com o vetor todo…

isso ta parecendo orientacao a strings invez de OO :shock:

tiidle

Por favor, me corrijam se eu estiver errado… Fiz assim:

public String emitePassageiro()
    {
       int i;
       for (i = 0; i < qtdePassageiro; i++)
           System.out.println(pa[i].emitePassageiro());
       
       return("Todos as informações foram impressas com Sucesso.");
    }

Muito grato!

F

WillyKocher:
afinal voce so quer imprimir um resultado na tela ou quer retornar todos os dados pra alguem ?
se for se imprimir e so iterar pelo vetor e sair imprimindo sem retornar nada…
se quizer retornar e so voce retornar o vetor inteiro invez de retornar strings…

ai quem chamou o metodo faz oque bem intender com o vetor todo…

isso ta parecendo orientacao a strings invez de OO :shock:

É, realmente, se desejar retornar todos os valores do vetor, retorno ele por inteiro, mais fácil. Orientação a String, rox aiuhsdiauhda

F

tiidle:
Por favor, me corrijam se eu estiver errado… Fiz assim:

public String emitePassageiro()
    {
       int i;
       for (i = 0; i < qtdePassageiro; i++)
           System.out.println(pa[i].emitePassageiro());
       
       return("Todos as informações foram impressas com Sucesso.");
    }

Muito grato!

Cara, já não estou mais entendo o contexto do seu problema. Envia pra nós todo código das classes envolvidas.

Falow.

tiidle

Bem, então lá vai todo o código...

Classe Passageiro:

public abstract class Passageiro
{
    protected String nome;
    protected int poltrona;
    protected String tipo;
    
    public Passageiro()
    {
        nome = "";
        poltrona = 0;
        tipo = "";
    }
    
    public Passageiro( String no, int po, String ti)
    {
        setNome(no);
        setPoltrona(po);
        setTipo(ti);
    }
    
    public void setNome(String no)
    {
        nome = no;
    }
    
    public void setPoltrona(int po)
    {
        poltrona = po;
    }
    
    public void setTipo(String ti)
    {
        tipo = ti;
    }
    
    public String getNome()
    {
        return (nome);
    }
    
    public int getPoltrona()
    {
        return (poltrona);
    }
    
    public String getTipo()
    {
        return (tipo);
    }
    
    public abstract String emitePassageiro();

A seguir, tem duas classes que herdam de Passageiros, A classe Standard:

public class Standard extends Passageiro
{
   private String tipoLanche;    
    
   public Standard()
   {
       tipoLanche = "";
   }
   
   public Standard(String tLa)
   {
       setTipoLanche(tLa);
   }
    
   public void setTipoLanche(String tLa)
   {
       tipoLanche = tLa;
   }
   
   public String getTipoLanche()
   {
       return (tipoLanche);
   }
   
   public String emitePassageiro()
   {
       return ("Nome: " + this.getNome() + 
               "Poltrona: " + this.getPoltrona() + 
               "Tipo: " + this.getTipo() + 
               "Tipo lanche; " + this.getTipoLanche());
   }

E a classe Luxo:

public class Luxo extends Passageiro
{
    protected String bebidaAlcoolica;
    
    public Luxo()
   {
       bebidaAlcoolica = "";
   }
   
   public Luxo(String bAl)
   {
       setBebidaAlcoolica(bAl);
   }
    
   public void setBebidaAlcoolica(String bAl)
   {
       bebidaAlcoolica = bAl;
   }
   
   public String getBebidaAlcoolica()
   {
       return (bebidaAlcoolica);
   }
   
   public String emitePassageiro()
   {
       return ("Nome: " + this.getNome() + 
               "Poltrona: " + this.getPoltrona() + 
               "Tipo: " + this.getTipo() + 
               "Tipo lanche; " + this.getBebidaAlcoolica());
   }

A seguir, tenho a classe onibus:

public class Onibus
{
    private int qtdePassageiro;
    private int numero;
    private Passageiro pa[];
    
    
    public Onibus()
    {
        qtdePassageiro = 0;
        numero = 0;
        pa = new Passageiro[10];
    }
    
    public Onibus(int nu)
    {
        setQtdePassageiro(0);
        setNumero(nu);
        pa = new Passageiro[10];
    }
    
    public void setQtdePassageiro(int qPa)
    {
        qtdePassageiro = qPa;
    }
    
    public void setNumero(int nu)
    {
        numero = nu;
    }
    
    public int getQtdePassageiro()
    {
        return (this.qtdePassageiro);
    }
    
    public int getNumero()
    {
        return (numero);
    }
    
    public void criaPassageiroClasseStandard(Standard sta1)
    {
        pa[getQtdePassageiro()] = sta1;
        setQtdePassageiro(getQtdePassageiro()+1);        
    }
    
    public void criaPassageiroClasseLuxo(Luxo sta1)
    {
        pa[getQtdePassageiro()] = sta1;
        setQtdePassageiro(getQtdePassageiro()+1);        
    }
    
    public Onibus obterOnibus()
    {
        return this;
    }
            
    public String emitePassageiro()
    {
       int i;
       for (i = 0; i < qtdePassageiro; i++)
           System.out.println(pa[i].emitePassageiro());
       
       return("Todos as informações foram impressas com Sucesso.");
    }

No exercício que estou fazendo, ele pede para implementar um método emitePassageiro() que faça o seguinte: Implemente em Java o método emitePassageiros da classe Onibus, que retorna em uma String as informações de todos os passageiros do onibus.

O jeito que fiz está correto?! Muito grato e desculpe-me pela confusão. Abraços.

B

Umm, não está certo.

Ele imprime uma String, não retorna o que você quiser.

Use o append do StringBuffer p/ colocar as infos dos passageiros dentro dele, e ao final retorne o stringbuffer.toString();

public String emitePassageiro()
    {
       StringBuffer buffer = new StringBuffer(); 
       for (int i = 0; i < qtdePassageiro; i++)
           buffer.append(pa[i].emitePassageiro());
       
       return(buffer.toString());
    }
F

Então kra, o jeito que vc fez funciona, mas no entanto ele pede que o método emitePassageiro da classe ônibus retorne uma String com as informações dos passageiros, então acho que vc vai ter que fazer daquele jeito que falei anteriormente, com o uso do for e concatenando em uma variável String.

F
Bruno Laturner:
Umm, não está certo.

Ele imprime uma String, não retorna o que você quiser.

Use o append do StringBuffer p/ colocar as infos dos passageiros dentro dele, e ao final retorne o stringbuffer.toString();

public String emitePassageiro()
    {
       StringBuffer buffer = new StringBuffer(); 
       for (int i = 0; i < qtdePassageiro; i++)
           buffer.append(pa[i].emitePassageiro());
       
       return(buffer.toString());
    }

Sim, uma opção também.

tiidle

Pessoal, muito obrigado pela ajuda! Consegui!

Criado 30 de maio de 2008
Ultima resposta 30 de mai. de 2008
Respostas 12
Participantes 5