Dúvida: verifica se um numero existe no vetor[20]

Nas suas primeiras mensagens vi que você vai precisar saber também se um assento é na janela ou corredor, certo?
Normalmente, assentos com número impar são na janela, logo tudo o que você precisa fazer é verificar se o número do assento é par o ímpar.
Para te dar uma dica, o operador % retorna o resto da divisão de dois inteiros.

int resto = n1%n2;

Se você verificar o resto dividindo o número da poltrona por 2, fica fácil saber se o número é par ou ímpar. O resto é lição de casa :slight_smile:

Cassio é isso mesmo, tenho que emitir um relatório informando se a poltrona é janela ou corredor.

Os métodos sets da vida servem para validar os dados, e estou pensando em validar isso na classe Passageiro

public void setPoltrona(int poltrona) { if((num%2)==0) System.out.println("Poltrona: Corredor"); else System.out.println("Poltrona: Janela" this.poltrona = poltrona; }

Com isso, acredito que resolvi esse problema ou será que tem como melhorar isso?

RenataFA, ainda não testei o método insereNoAquivo, trabalho em dois emprego e ta …

[quote=Sergio Prado]Cassio é isso mesmo, tenho que emitir um relatório informando se a poltrona é janela ou corredor.

Os métodos sets da vida servem para validar os dados, e estou pensando em validar isso na classe Passageiro

public void setPoltrona(int poltrona) { if((num%2)==0) System.out.println("Poltrona: Corredor"); else System.out.println("Poltrona: Janela" this.poltrona = poltrona; }

Com isso, acredito que resolvi esse problema ou será que tem como melhorar isso?

RenataFA, ainda não testei o método insereNoAquivo, trabalho em dois emprego e ta …[/quote]

A principio está ok sim :slight_smile:

Pessoal, criei o método inseriNoArquivo conforme classe abaixo

[code]import java.io.*;
public class Passageiro{

    // Atributos   
    private String nome, rg;   
    private int poltrona;   
       
    public Passageiro(){}   
       
    public Passageiro(String nome, String rg, int poltrona){   
        this.nome     = nome;   
        this.rg       = rg;   
        this.poltrona = poltrona;   
    }   

    public String getNome() {   
        return nome;   
    }   
       
    public String getRg() {   
         return rg;   
    }   

    public int getPoltrona() {   
         return poltrona;   
    }   

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

    public void setPoltrona(int poltrona) {
    	if((poltrona%2)==0)
    		System.out.println("Poltrona: corredor");
    	else
    		System.out.println("Poltrona: janela");	 
         this.poltrona = poltrona;   
    }
    
    // Criei esse método para inserir os dados dos atributos no arquivo, compilo a classe sem problemas
    public static void insereNoArquivo(String nome, String rg, int poltrona){
    	
    	File f= new File("C:\Trab Interdiciplinar","arq.txt");

		try{
			FileWriter fw = new FileWriter(f);
		
			BufferedWriter escrita = new BufferedWriter(fw);

			escrita.write(nome);
			escrita.write(rg);
			escrita.write(poltrona);

			escrita.newLine();
		
			escrita.close();
	}
	catch(IOException ex)
	{
		System.out.println("\n Prolemas com o arquivo");
	}
}

} [/code]

Porém no método main, quando compilo apresenta erro no método inseriNoArquivo, conforme classe abaixo

[code]import javax.swing.JOptionPane;
import java.io.*;
public class UsaPassageiro{

static Passageiro[] aPassageiros = new Passageiro[3];    
static Passageiro[] inseriArquivo = new Passageiro[3];   
   
public static void main(String args[]){   
       
    // loop para pegar todos os passageiros   
    for(int i=0;i<3;i++){   
        String nome = JOptionPane.showInputDialog("Digite o nome");               
        String rg = JOptionPane.showInputDialog("Digite o rg");   
           
        int poltrona = 0; // inicio como poltrona = 0   
        // fico pedindo a poltrona até que ela seja diferente de 0 e desocupada   
        while (poltrona == 0 || !poltronaLivre(poltrona)) 
            poltrona = Integer.parseInt(JOptionPane.showInputDialog("Digite a poltrona"));     
           
           // crio o objeto passageiro (se preferir pode mudar o construtor pra já passar os parâmetros)   
           Passageiro p = new Passageiro(nome, rg, poltrona);   
           
          // adiciono o passageiro na minha lista de passageiros   
         aPassageiros[i] = p;   
    }   
       
    // loop para imprimir todos os passageiros   
    for(int i=0;i<aPassageiros.length;i++){   
        System.out.println("Nome: " + aPassageiros[i].getNome());   
        System.out.println("Rg: " + aPassageiros[i].getRg());   
        System.out.println("Nome: " + aPassageiros[i].getPoltrona()); 
    }
    // chamo o método
    insereNoArquivo(aPassageiros);   			
}   
   
/**  
 * Verifico se a poltrona de número p passada está livre, ou seja, se ela não pertence a nenhum outro passageiro  
 * ainda.  
 * @param p  
 * @return  
 */   
private static boolean poltronaLivre(int p){   
       
    for(int i = 0; i < aPassageiros.length; i++){   
        // como já configurei que o array terá 3 posições, ele percorre até 3, 
        //só quem nem sempre tem um passageiro na posição   
        // do array, a posição pode estar null, por isso tava dando aquele erro.   
        if ((aPassageiros[i] != null) && (p == aPassageiros[i].getPoltrona())){   
            //System.out.println("Poltrona ocupada!!!");   
            JOptionPane.showMessageDialog(null,"Poltrona ocupada");
            
            return false;   
        }   
    }   
    
    return true;   
}

}[/code]

Quando compilo, apresenta erro conforme abaixo:

C:\Trab Interdiciplinar\UsaPassageiro.java:32: cannot find symbol
symbol : method insereNoArquivo(Passageiro[])
location: class UsaPassageiro
insereNoArquivo(aPassageiros);

Você que tem vivência em programação, será que está errado a maneira de chamar o método

inserePassageiro() é um método que vc declarou dentro da classe Passageiro, mas voc^e está chamando este método de dentro da classe UsaPassageiro(), a qual não tem esse método. Para poder fazer algo assim, você precisaria de um objeto da classe Passageiro e através deste objeto chamaria o método inserePassageiro().

Cassio, temos:
Passageiro p = new Passageiro(nome, rg, poltrona);

Fiz isso na classe UsaPassageiro, utilizando o método inseriNoArquivo da classe Passageiro
inseriNoArquivo§

Depois compilei e apresentou erro de compilação também
Inclui o método inseriNoArquivo na classe UsaPassageiro e também apresentou erro de compilação

Será que é isso mesmo? o erro

Coloca o código e o stacktrace do erro aqui.

Cassio, estou compilando no JCreator e o erro é este abaixo:

C:\Trab Interdiciplinar\UsaPassageiro.java:32: cannot find symbol
symbol : method insereNoArquivo(Passageiro[])
location: class UsaPassageiro
insereNoArquivo(aPassageiros);

Criei esse objeto
Passageiro obj = new Passageiro(nome, rg, poltrona)

Chamei o método insereNoArquivo
insereNoArquivo(obj)

Segue classe principal

[code]
import javax.swing.JOptionPane;
import java.io.*;
public class UsaPassageiro{

static Passageiro[] aPassageiros = new Passageiro[3];    
      
public static void main(String args[]){   
       
    // loop para pegar todos os passageiros   
    for(int i=0;i<3;i++){   
        String nome = JOptionPane.showInputDialog("Digite o nome");               
        String rg = JOptionPane.showInputDialog("Digite o rg");   
           
        int poltrona = 0; // inicio como poltrona = 0   
        
        // fico pedindo a poltrona até que ela seja diferente de 0 e desocupada   
        while (poltrona == 0 || !poltronaLivre(poltrona)) 
        poltrona = Integer.parseInt(JOptionPane.showInputDialog("Digite a poltrona"));     
           
        // crio o objeto passageiro (se preferir pode mudar o construtor pra já passar os parâmetros)   
        Passageiro p = new Passageiro(nome, rg, poltrona); 
       	  
       // adiciono o passageiro na minha lista de passageiros   
       aPassageiros[i] = p;
       insereNoArquivo( aPassageiros);          
    }   
    
    // loop para imprimir todos os passageiros   
    for(int i=0;i<aPassageiros.length;i++){   
        System.out.println("Nome: " + aPassageiros[i].getNome());   
        System.out.println("Rg: " + aPassageiros[i].getRg());   
        System.out.println("Nome: " + aPassageiros[i].getPoltrona()); 
    }
     	  			
}   
   
/**  
 * Verifico se a poltrona de número p passada está livre, ou seja, se ela não pertence a nenhum outro passageiro  
 * ainda.  
 * @param p  
 * @return  
 */   
private static boolean poltronaLivre(int p){   
       
    for(int i = 0; i < aPassageiros.length; i++){   
        // como já configurei que o array terá 3 posições, ele percorre até 3, 
       //só quem nem sempre tem um passageiro na posição   
        // do array, a posição pode estar null, por isso tava dando aquele erro.   
        if ((aPassageiros[i] != null) && (p == aPassageiros[i].getPoltrona())){   
            //System.out.println("Poltrona ocupada!!!");   
            JOptionPane.showMessageDialog(null,"Poltrona ocupada");
            
            return false;   
        }   
    }   
    
    return true;   
}

} [/code]

Agora que eu vi, vc criou o seu método insereNoArquivo como um método estático da classe passageiro.

Você tem que invocar esse método a partir da CLASSE passageiro, como o método é estático, vc não precisa criar um objeto. Mas também não pode simplesmente chamar o metodo sem relacioná-lo com a classe, porque o compilador não vai achar (a não ser que vc estivesse invocando o método de dentro da mesma classe na qual ele foi declarado).

O certo seria

Passageiro.insereNoArquivo(seuObjetoDaClassePassageiro);

Cassio, fiz isso que você disse e o erro continua, será que eu vou ter que criar a classe File no método main e atribuir os dados do objeto no arq.txt

Passageiro.insereNoArquivo(seuObjetoDaClassePassageiro);  

Pelo que eu entendi, insereNoArquivo é um método da classe passageiro, então, invés de:

Passageiro obj = new Passageiro(nome, rg, poltrona) insereNoArquivo(obj)

Faça:

Passageiro obj = new Passageiro(nome, rg, poltrona) obj.insereNoArquivo()

Claro que vc terá que modificar um pouquinho seu método insereNoArquivo, invés dele receber por parâmetro o passageiro que deve inserir, ele já está nesse passageiro, basta que vc pegue as informações que precisa (nome, rg e poltrona) dos atributos da classe passageiro, onde vc está com o método insereNoArquivo().

Será que consegui explicar?! :roll:

na declaração de seu vetor:

static Passageiro[] [color=red]aPassageiros = new Passageiro[3];[/color] //vetor com 3 objetos do tipo Passageiro

na declaração do seu método insereNoArquivo:

public static void insereNoArquivo([color=green]String nome, String rg, int poltrona[/color]) // insereNoArquivo([color=green]String, String, int[/color])
{
//…
}

na chamada do seu método insereNoArquivo:

insereNoArquivo([color=red]aPassageiros[/color]); //insereNoArquivo([color=red]vetor com 3 objetos do tipo Passageiro[/color])

voce quer inserir todos os passageiros de uma vez, sendo que seu método só insere 1 passageiro.

[code]public static void insereNoArquivo(Passageiro[] vPass){

        File f= new File("C:\Trab Interdiciplinar","arq.txt");  

        try{  
            FileWriter fw = new FileWriter(f);  
          
            BufferedWriter escrita = new BufferedWriter(fw);  

            for(int i = 0; i < vPass.length(); i++){
                escrita.write(vPass[i].nome);  
                escrita.write(vPass[i].rg);  
                escrita.write(vPass[i].poltrona);  
                escrita.newLine();
            }
                         
            escrita.close();  
    }  
    catch(IOException ex)  
    {  
        System.out.println("\n Prolemas com o arquivo");  
    }  

} [/code]

onde vPass seria o seu vetor de passageiros aPassageiro;

veja que no seu erro:

C:\Trab Interdiciplinar\UsaPassageiro.java:32: cannot find symbol
symbol : method insereNoArquivo(Passageiro[])

ele nao acha o método insereNoArquivo() tendo como parâmetro um vetor de Passageiro.

nao compilei, mas creio que o erro de lógica seja esse.

Pessoal, tenho tido ajuda de vocês aqui doForum, principalmente da Renata e desde já agradeço pelas dicas e idéias.

Estou com outro problema no método abaixo:

[code]public void insereNoArquivo(){

    	File f= new File("C:\Documents and Settings\Administrador\
                                                                              Meus documentos\Interdiciplinar","arquivo.txt");
                                      
try{
FileWriter fw = new FileWriter(f , true);
		
BufferedWriter escrita = new BufferedWriter(fw);

	escrita.write(nome + " | ");
	escrita.write(rg + " | ");
	escrita.write(poltrona);

	escrita.newLine();
		
                escrita.close();
}
catch(IOException ex){
	System.out.println("\n Prolemas com o arquivo");
}

}[/code]

Chamo esse método dessa forma

Passageiro obj = new Passageiro(nome, rg, poltrona); obj.insereNoArquivo();

Está gravando no arquivo.txt

sergio | 12345 | fulano | 65432 |

Tenho os atributos do tipo String nome, String rg, int poltrona
Alguem tem uma idéia como faço para gravar no arquivo int.

Ué?!

Não sabia que não gravava o int! :shock:

Bom, tenta assim:

escrita.write(String.valueOf(poltrona));

Renata mais uma vez obrigado, sempre ajudando na lógica.

Fiz algumas consistências nos metodos sets

[code]public void setNome(String aux) {
if(aux != null){
if(aux.trim()!= “”)
this.nome = aux;
}

    }   
       
    public void setRg(String aux) {
    	 if(aux != null){
    	           if(aux.trim()!= "")   
        	           this.rg = aux;      
             }
    }       

    public void setPoltrona(int aux){
    	if(aux <= 0) 
                           JOptionPane.showMessageDialog(null,
                                                "Poltrona deve ser maior que zero");
    		
    	if((aux%2)==0)
    		System.out.println("Poltrona: corredor");        		
    	else
    		System.out.println("Poltrona: janela");	 
         this.poltrona = aux;   
  }
    [/code]

Tem outras formas na classe UsaPassageiro para tratar os dados

  1. Não aceitar valores negativos na poltrona
  2. Se o usuário clicar no botão cancelar o sistema não apresentar erro
  3. Obrigar o usuário digitar nome, rg e poltrona apresentar mensagem tipo “Nome obrigatório”

[quote=Sergio Prado]Renata mais uma vez obrigado, sempre ajudando na lógica.

Fiz algumas consistências nos metodos sets

[code]public void setNome(String aux) {
if(aux != null){
if(aux.trim()!= “”)
this.nome = aux;
}

    }   
       
    public void setRg(String aux) {
    	 if(aux != null){
    	           if(aux.trim()!= "")   
        	           this.rg = aux;      
             }
    }       

  ...        [/code]

[/quote]

Não use String == String como você faz em

if(aux.trim()!= "") 

Use o método equals ou então isso sempre retornara false

if( ! aux.trim().equals("")) ;

Certo, e qual a sua dúvida sobre essas consistências. Tentou fazê-las?

Ah, e use a dica do amigo sobre comparações de Strings :wink:

Mark_Ameba, obrigado pela dica, alteração realizada com sucesso.

Renata, estou tentando colocar só mais uma consistência.
Tenho 20 poltronas, se o usuário digitar poltrona negativa (-10) o sistema apresentar crítica ou maior que vinte o sistema apresentar crítica também.

A classe tá assim

[code]import javax.swing.JOptionPane;
import java.io.*;
public class UsaPassageiro{

static Passageiro[] aPassageiros = new Passageiro[5];    
      
public static void main(String args[]){   
       
       // loop para pegar todos os passageiros   
       for(int i = 0; i < aPassageiros.length; i++){ 
     	  
           String nome = JOptionPane.showInputDialog("Digite o nome");               
           String rg = JOptionPane.showInputDialog("Digite o rg");   
         
           // inicio como poltrona = 0   
           int poltrona = 0; 
        
           // fico pedindo a poltrona até que ela seja diferente de 0 e desocupada   
           while (poltrona == 0 || !poltronaLivre(poltrona))
      	     poltrona = Integer.parseInt(JOptionPane.showInputDialog("Digite a poltrona"));   
        
           // crio o objeto passageiro 
           Passageiro p = new Passageiro(nome, rg, poltrona); 
      
      	// adiciono o passageiro na minha lista de passageiros   
      	aPassageiros[i] = p;
     	p.insereNoArquivo(); 
p.PoltronaJanela();
p.PoltronaCorredor();
        }   
   }   
   
 /* Verifico se a poltrona de número p passada está livre, ou seja, 
 * se ela não pertence a nenhum outro passageiro*/
   
private static boolean poltronaLivre(int p){   
    for(int i = 0; i < aPassageiros.length; i++){

        // como já configurei que o array terá 3 posições, ele percorre até 3, 
        // só quem nem sempre tem um passageiro na posição   
        // do array, a posição pode estar null, por isso tava dando aquele erro.

        if ((aPassageiros[i] != null) && (p == aPassageiros[i].getPoltrona())){   
        	JOptionPane.showMessageDialog(null,"Poltrona ocupada");
            return false;   
        }
    }   
    
    return true;   
}

} [/code]

Já sei! Muda o nome do método poltronaLivre pra poltronaValida. Ai vc modifica o método assim:

[code]private static boolean poltronaValida(int p){

// acrescentei esse trecho
if ((p <= 0) || (p > 20)){
    JOptionPane.showMessageDialog(null,"Poltrona inválida");
    return false;   
}
//

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

    if ((aPassageiros[i] != null) && (p == aPassageiros[i].getPoltrona())){   
        JOptionPane.showMessageDialog(null,"Poltrona ocupada");
        return false;   
    }
}   
    
return true;   

}[/code]

Estou grato a todos vocês aqui do GUJ, postei um projetinho aqui, e conforme vinha uma dúvida eu postava minha dúvida e em seguida vinha solução.

Daqui um tempinho vou ajudar os iniciantes desse forum também.

Valeu pessoal