Erro: missing return statement, como resolver?

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!

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:

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?!

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.

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:

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!

[quote=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: [/quote]

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

[quote=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![/quote]

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

Falow.

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

Classe Passageiro:

[code]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();[/code]

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

[code]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());
}[/code]

E a classe Luxo:

[code]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());
}[/code]

A seguir, tenho a classe onibus:

[code]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.");
}[/code]

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.

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();

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

   return(buffer.toString());
}

[/code]

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.

[quote=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();

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

   return(buffer.toString());
}

[/code][/quote]

Sim, uma opção também.

Pessoal, muito obrigado pela ajuda! Consegui!