Ajuda num vetor e um for dentro de outro for

6 respostas
C

Ai pessoal do Guj, Boa tarde… to com o seguinte dilema…

To fazendo um trabalho para a faculdade…
tenho os seguintes códigos:

* Arquivo de entrada e saída de dados
 * 
 */

package estudodecaso2;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.StringTokenizer;

/**
 *
 * @author UNITINS
 * Classe destinada a representar o objeto que realizará a leitura dos arquivos de entrada
 * (passageiros.txt e itinerario.txt) e a escrita dos arquivos de saída (saida1.txt e saida2.txt).
 * 
 */
public class Io {
    
    private ArrayList<Passageiro> conseguiramViajar = new ArrayList<Passageiro>();
    private ArrayList<Passageiro> naoConseguiramViajar = new ArrayList<Passageiro>();
    
    public ArrayList<Trecho> lerArquivoItinerario(String sFileName, Veiculo veiculo) {
        File arquivo = new File(sFileName);
        
        if(!arquivo.exists())
        {
            System.err.println("Arquivo \""+sFileName+"\" não existe.");
            return null;
        }
             
        try //tentativa de execução do seguinte código:
        {
            ArrayList<Trecho> lista = new ArrayList<Trecho>();
            BufferedReader leitor  = new BufferedReader(new FileReader(arquivo)); //leitor sequencial

            // Recupera todas as linhas de modo sequencial
            String linha = null;
           // int indice = 0; //índice do trecho, para facilitar o cálculo de intersecção de trechos, saber quando uma viagem acabou, etc.
            while ((linha = leitor.readLine()) != null) {
                //<cidade_origem>;<cidade_destino>
                StringTokenizer st = new StringTokenizer(linha, ";");
                Trecho trecho = new Trecho();
                trecho.setCidadeOrigem(st.nextToken()); //<cidade_origem>  
                trecho.setCidadeDestino(st.nextToken()); //<cidade_destino>           

                lista.add(trecho);
             }

            
            leitor.close(); //fechar leitor
            
            return lista;
            
         } catch (IOException e) {
            //exibe o erro na saída de erro (err)
            System.err.println("Ocorreu um erro: "+e.toString());            
         }//fim try catch
         
        return null;
    }// fim  lerArquivoItinerario 
    
    public ArrayList<Passageiro> lerArquivoPassageiros(String sFileName) {
        File arquivo = new File(sFileName);
        
        if(!arquivo.exists())
        {
            System.err.println("Arquivo \""+sFileName+"\" não existe.");
            return null;
        }
        
        try //tentativa de execução do seguinte código:
        {
            ArrayList<Passageiro> lista = new ArrayList<Passageiro>();
            BufferedReader leitor  = new BufferedReader(new FileReader(arquivo)); //leitor sequencial

            // Recupera todas as linhas de modo sequencial            
            String linha = null;
            while ((linha = leitor.readLine()) != null) {
                //<nome_passageiro>;<cidade_origem>;<cidade_destino>
                StringTokenizer st = new StringTokenizer(linha, ";");
                String sNomePassageiro = st.nextToken();
                String cOrigem = st.nextToken();
                String cDestino = st.nextToken();
                               
                Passageiro passageiro = new Passageiro(sNomePassageiro,cOrigem,cDestino);

                lista.add(passageiro);
             }

            
            leitor.close(); //fechar leitor
            
            return lista;
            
         } catch (IOException e) {
            //exibe o erro na saída de erro (err)
            System.err.println("Ocorreu um erro: "+e.toString());            
         }//fim try catch
         
        return null;
    }// fim  lerArquivoPassageiros
    
   
    public void AdicionarPassageiroConseguiuViajar(Passageiro p){
        conseguiramViajar.add(p);
    }
    public void RemoverPassageiroConseguiuViajar(){
        conseguiramViajar.remove(conseguiramViajar.size()-1);
    }
    
    public void AdicionarPassageiroNaoConseguiuViajar(Passageiro p){
        naoConseguiramViajar.add(p);
    }

   public Boolean gerarSaida1(String sFileName){
        BufferedWriter out = null;
        try {
            out = new BufferedWriter(new FileWriter(sFileName));
            for (int i = 0; i < conseguiramViajar.size(); i++) {
                out.write(conseguiramViajar.get(i).getNome()+";"+
                          conseguiramViajar.get(i).getTrechoPretendido().cidadeOrigem+";"+
                          conseguiramViajar.get(i).getTrechoPretendido().cidadeDestino+"\r\n");
            }
            out.close();
            return true;
        } catch (IOException ex) {
            System.err.println("Ocorreu um erro gerando saída. ex="+ex.toString());
            return false;
        } finally {
            try {
                out.close();
            } catch (IOException ex) {
                System.err.println("Saída em memória: erro fechando arquivo de saída. ex="+ex.toString());
            }
        }
    }
    
    
    public Boolean gerarSaida2(String sFileName){
        BufferedWriter out = null;
        try {
            out = new BufferedWriter(new FileWriter(sFileName));
            for (int i = 0; i < naoConseguiramViajar.size(); i++) {
                out.write(naoConseguiramViajar.get(i).getNome()+";"+
                          naoConseguiramViajar.get(i).getTrechoPretendido().cidadeOrigem+";"+
                          naoConseguiramViajar.get(i).getTrechoPretendido().cidadeDestino+"\r\n");
            }
            out.close();
            return true;
        } catch (IOException ex) {
            System.err.println("Ocorreu um erro gerando saída. ex="+ex.toString());
            return false;
        } finally {
            try {
                out.close();
            } catch (IOException ex) {
                System.err.println("Saída em memória: erro fechando arquivo de saída. ex="+ex.toString());
            }
        }
    }
    
}

e

package estudodecaso2;


/**
 *
 * @author UNITINS
 * Classe destinada a representar um veículo. Possui como atribuitos o 
 * número de poltronas para passageiros e um nome para mera identificação.
 * 
 */
public class Veiculo {
    int nPoltronas;
    String nome;

    public Veiculo(Integer nPoltronas,String sNome){
        this.nome = sNome;
        this.nPoltronas = nPoltronas;
    }
    
    public int getNPoltronas()
    {
        return nPoltronas;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }
    
}

e

package estudodecaso2;

/**
 *
 * @author UNITINS
 * Classe destinada a representar um passageiro. Possui como atribuitos o 
 * nome e o trecho ao qual o passageiro pretende (possui intenção de) viajar.
 * 
 */
public class Passageiro {
    private String nome;
    private TrechoPretendido trechoPretendido = new TrechoPretendido();

    public class TrechoPretendido {
        String cidadeOrigem,cidadeDestino;
    }    

    public Passageiro(String nome, String cOrigem,String cDestino) {
        this.nome = nome;
        this.trechoPretendido.cidadeOrigem = cOrigem;
        this.trechoPretendido.cidadeDestino = cDestino;
    }
    
    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public TrechoPretendido getTrechoPretendido() {
        return trechoPretendido;
    }   
   
}

e

package estudodecaso2;

/**
 *
 * @author UNITINS
 * Classe destinada a representar um trecho, intervalo entre duas cidades. Vale lembrar que 
 * um itinerário é formado por vários trechos. Possui como atribuitos a cidade de 
 * origem e de destino.
 * 
 */
public class Trecho {
    private String cidadeOrigem,
                   cidadeDestino;
 
    public String getCidadeDestino() {
        return cidadeDestino;
    }

    public void setCidadeDestino(String cidadeDestino) {
        this.cidadeDestino = cidadeDestino;
    }

    public String getCidadeOrigem() {
        return cidadeOrigem;
    }

    public void setCidadeOrigem(String cidadeOrigem) {
        this.cidadeOrigem = cidadeOrigem;
    }
    
}

e

package estudodecaso2;

/**
 *
 * @author UNITINS
 * Classe destinada a representar uma especialização de um veículo.
 * Deve-se, primeiramente, implementar esta classe para que todo o código fonte
 * seja compilado.
 * 
 */
/**implementeaqui**/
// implemente aqui.
public class Onibus extends Veiculo {
	public Onibus(){
	super(46, "Pocoto");
	}
	}

e a executavel

package estudodecaso2;

import java.util.ArrayList;

/**
 *
 * @author UNITINS
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
                
        // Instância de um objeto Onibus (veja o arquivo Onibus.java
        Onibus carro = new Onibus();
        
        Io io = new Io();
        ArrayList<Trecho> itinerario;               

        try {
            itinerario = io.lerArquivoItinerario("itinerario.txt", carro);
        } catch (Exception ex) {
            System.err.println("Erro lendo arquivo itinerario.txt ex="+ex.toString());
            return;
        }
        
        //arquivo de passageiros
        ArrayList<Passageiro> passageiros = io.lerArquivoPassageiros("passageiros.txt"); 
        Passageiro passageiro[] = new Passageiro[passageiros.size()];
        for (int iPassageiro = 0; iPassageiro < passageiros.size(); iPassageiro++) {
            passageiro[iPassageiro] = new Passageiro(
                                            passageiros.get(iPassageiro).getNome(), 
                                            passageiros.get(iPassageiro).getTrechoPretendido().cidadeOrigem,
                                            passageiros.get(iPassageiro).getTrechoPretendido().cidadeDestino);
        }
        
        Viagem viagem = new Viagem(itinerario,carro,passageiros);
        
        
       //exibir a rota
        System.out.println("Atenção Sr. clientes! Aberto período para venda de passagens no veículo ("+viagem.getVeiculo().getNome()+") que irá executar a seguinte rota:");
        for (int i = 0; i < viagem.itinerario.size(); i++) {
            System.out.println("Trecho "+Integer.toString(i+1)+" --------------------------------- ");
            System.out.println("saída   de: "+viagem.itinerario.get(i).getCidadeOrigem());
            System.out.println("chegada em: "+viagem.itinerario.get(i).getCidadeDestino());
        }
        System.out.println("Nossos guichês estão abertos neste momento, nestas cidades. Aguardando clientes...");


        viagem.SimulaViagem(io);
        
        if(viagem.getIo().gerarSaida1("saida1.txt")) 
        {
            System.out.println("saida1.txt gerado com sucesso.");
        }
        else
        {
            System.out.println("Erro gerando saida1.txt");
        }


        if(viagem.getIo().gerarSaida2("saida2.txt")) 
        {
            System.out.println("saida2.txt gerado com sucesso.");
        }
        else
        {
            System.out.println("Erro gerando saida2.txt");
        }   
        System.out.println("Atendimento finalizado. Obrigado por usar nossos serviços.");
    }
 
}

E estou tendo dificuldades exatamente em implementar a simulação da viagem do passageiro sera que alguem pode me ajudar???
OBS … Meu codigo esta entre as sequencias de asteriscos

este e o meu código que estou fazendo

package estudodecaso2;

import java.util.ArrayList;

/**
 *
 * @author UNITINS
 * Classe destinada a representar uma viagem. 
 * 
 */
public class Viagem {
    ArrayList<Trecho> itinerario;
    ArrayList<Passageiro> passageiros;
    Veiculo veiculo;
    int vetorOcupadas[];
    private Io io;

    public Viagem(ArrayList<Trecho> itinerario,Veiculo veiculo,ArrayList<Passageiro> passageiros) {
        this.itinerario = itinerario;
        this.passageiros = passageiros;
        this.veiculo = veiculo;

        vetorOcupadas = new int[itinerario.size()];

        for (int i = 0; i < vetorOcupadas.length; i++) {
            vetorOcupadas[i] = 0;            
        
        }
        
        
    }

    /**
     * 
     * @param io
     * Método principal da classe. Tem a finalidade de simular a viagem para gerar os dados
     * de saída, ou seja, qual passageiro viajou e qual não viajou.
     * 
     */

    public void SimulaViagem(Io io){
       

    	
    /***************************************************************************/
    	    int p = 0;
            String NomePass;
            String Ci_Origem;
            String Ci_Destino;

               
            for( p = 0; p < passageiros.size(); p++ ){
            	
            		NomePass = passageiros.get(p).getNome();
                    Ci_Origem = passageiros.get(p).getTrechoPretendido().cidadeOrigem;
                    Ci_Destino = passageiros.get(p).getTrechoPretendido().cidadeDestino;
                    Passageiro passageiro = new Passageiro(NomePass, Ci_Origem, Ci_Destino); 
                    io.AdicionarPassageiroConseguiuViajar(passageiro);
            
                                          
            System.out.println("Cliente "+"("+(p +1)+")"+"" +
            		" "+NomePass+"  "+ "Origem: "+Ci_Origem+"  "+"Destino: "+Ci_Destino);

            
           }
           
           this.io=io;
             
}
  
   
    /*******************************************************************************/
    public Veiculo getVeiculo() {
        return veiculo;
    }

    public void setVeiculo(Veiculo veiculo) {
        this.veiculo = veiculo;
    }
     
    public ArrayList<Trecho> getItinerario() {
        return itinerario;
    }

    public void setItinerario(ArrayList<Trecho> itinerario) {
        this.itinerario = itinerario;
    }

    public Io getIo() {
        return io;
    }
 }

alguem pode me dizer onde estou errando…

Desde ja agradeço.

6 Respostas

B

Não sei, que tal falar qual o problema, e pelo menos postar o stack trace do erro caso tiver um?

C

Esse código pega os dados de um arquivo txt, chamado passageiro.txt,
da seguinte forma

Jacinto Coelho;Rio Branco;Salvador
Anderson Noronha;Cuiabá;Teresina
Valdisney Amaral;Palmas;São Luís
Fernando Alegre;Teresina;Aracaju
Antonio Dozinete;Manaus;Brasília
Zoreide Zuleika;Goiânia;Florianópolis
Luis Fonseca;Brasília;Curitiba
Andreas Müller;Curitiba;Porto Alegre

e itinerario.txt da seguinte forma,

Palmas; Cuiabá
Cuiabá;Porto Velho
Porto Velho;Rio
Branco Rio Branco;Manaus
Manaus;Boa Vista
Boa Vista;Macapá
Macapá;Belém
Belém;São Luís
São Luís;Teresina
Teresina;Fortaleza
Fortaleza;Natal
Natal;João Pessoa
João Pessoa;Recife
Recife;Maceió
Maceió;Aracaju
Aracaju;Salvador

ai sera gerado 2 arquivos de saida… 1 com saida1.txt com os que viajaram e outro com saida2.txt com os que não viajaram.

e ai que não to conseguindo fazer…

B

Você pode montar o seguinte

class Cidade {
  String nome;
  List<Cidade> trechos; // ligações diretas com outras cidades
}
class Percorredor { // não use o mesmo percorredor duas vezes sem antes zerar a lista de cidades percorridas.
  List<Cidade> cidadesJáPercorridas;

  /**
  * Tenta ir até uma cidade destino a partir de uma saída
  * @return true se conseguiu, false caso contrário
  */
  public boolean foiAte(Cidade saída, Cidade destino)
  {
    if (saida.equals(destino)) // achei!
      return true;

    if (cidadesJáPercorridas.contains(saída))
      return false; // ih,  passei por esta cidade

    cidadesJáPercorridas.add(saida);

    for (Cidade c: saida.getTrechos())
    {
      if (foiAte(c, destino)) // cheguei ?
        return true; // Yes!
      // Não? então vai pra próxima cidade.
    }
    return false; // Não chegamos . Peninha.
  }
}
C

Bruno, como vc pode ter visto no código dde viagem.java....eu tenho que criar uma
classe public void SimulaViagem(Io io){
}

o onibus tem 46 lugares.... os trechos sao diferentes.... os primeiros 46 passageiros vao preencher o onibus
na proxima cidade alguns vao descer, ai outros vao entrar..e assim sucessivamente... ate ele concluir a lista e verificar quem viajou e que nao viajou.....

Bruno Laturner:
Você pode montar o seguinte
class Cidade {
  String nome;
  List<Cidade> trechos; // ligações diretas com outras cidades
}
class Percorredor {
  List<Cidade> cidadesJáPercorridas;

  /**
  * Tenta ir até uma cidade destino a partir de uma saída
  * @return true se conseguiu, false caso contrário
  */
  public boolean foiAte(Cidade saída, Cidade destino)
  {
    if (saida.equals(destino)) // achei!
      return true;

    if (cidadesJáPercorridas.contains(saída))
      return false; // ih,  passei por esta cidade

    cidadesJáPercorridas.add(saida);

    for (Cidade c: saida.getTrechos())
    {
      if (foiAte(c, destino)) // cheguei ?
        return true; // Yes!
      // Não? então vai pra próxima cidade.
    }
    return false; // Não chegamos . Peninha.
  }
}
B

clemente:

o onibus tem 46 lugares… os trechos sao diferentes… os primeiros 46 passageiros vao preencher o onibus
na proxima cidade alguns vao descer, ai outros vao entrar…e assim sucessivamente… ate ele concluir a lista e verificar quem viajou e que nao viajou…

Então tá mais fácil ainda, a cada parada do ônibus, o motorista verifica com todos os passageiros se eles vão descer ou não, desce quem chegou ao destino( estes vão para a lista daqueles que concluíram a viagem), e sobe outras pessoas, e assim continua até o final. Ao final disso quem ficou no ônibus não chegou aonde queria (ou seja, pra evitar esse problema, deveriam ter usado o percorredor antes de terem subido no ônibus).

C

Bruno, fiquei um pouco confuso… Sera que vc pode me adicionar no msn… [email removido], gostaria de entender isso… Desde já fico grato, pela sua ajuda.

Bruno Laturner:
clemente:

o onibus tem 46 lugares… os trechos sao diferentes… os primeiros 46 passageiros vao preencher o onibus
na proxima cidade alguns vao descer, ai outros vao entrar…e assim sucessivamente… ate ele concluir a lista e verificar quem viajou e que nao viajou…

Então tá mais fácil ainda, a cada parada do ônibus, o motorista verifica com todos os passageiros se eles vão descer ou não, desce quem chegou ao destino( estes vão para a lista daqueles que concluíram a viagem), e sobe outras pessoas, e assim continua até o final. Ao final disso quem ficou no ônibus não chegou aonde queria (ou seja, pra evitar esse problema, deveriam ter usado o percorredor antes de terem subido no ônibus).

Criado 29 de novembro de 2008
Ultima resposta 29 de nov. de 2008
Respostas 6
Participantes 2