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

41 respostas
S

Pessoal, sou iniciante em java e tenho uma dúvida besta

Como faço para verificar se já existe um numero no vetor[20]

for(i=0;i<20;i++){

num[i] = Integer.parseInt(JOptionPane.showInputDialog(Digite um número));

}

41 Respostas

maquiavelbona

Eu acho que você já fez o mais difícil, para ver se é um número, podes usar um laço try/catch usando os métodos da classe Integer ou Double. Dê uma olhadinha na documentação e caso tenha alguma dificuldade, te ajudo nisso.

Até!

RenataFA

Mas a pergunta era se "existe o número" não se "é um número", ou eu que viajei?! :shock:

Bom, para verificar se é um número vc deve fazer como sugeriu o maquiavel.

Seguindo sua idéia, para verificar se o número está no vetor, pode ser assim (usando a sua idéia inicial):

int numero = Integer.parseInt(JOptionPane.showInputDialog("Digite um número")); for(int i = 0; i < 5; i++){ if (num[i] == numero) System.out.println("é igual"); }

maquiavelbona

Perguntou se existe um número(tipo), não se existe um número específico (objeto).
Ai como a língua lusitana nos falta!

Até!

S

Na verdade, preciso montar uma condição simples:

  1. Tenho um vetor[20] do tipo inteiro
  2. Quando usuário digitar um numero e esse número não existir no vetor, o sistema permite cadastrar o código do produto, senão envia uma mensagem que já existe código do produto cadastrado.

Obs: estou fazendo um trabalho da faculdade que envolve manipulação de arquivo, métodos e objetos, conforme tenho uma dúvida solicito ajuda.

Estou grato pelas dicas e orientações.

Alkamavo

Sergio Prado:
Na verdade, preciso montar uma condição simples:

  1. Tenho um vetor[20] do tipo inteiro
  2. Quando usuário digitar um numero e esse número não existir no vetor, o sistema permite cadastrar o código do produto, senão envia uma mensagem que já existe código do produto cadastrado.

Obs: estou fazendo um trabalho da faculdade que envolve manipulação de arquivo, métodos e objetos, conforme tenho uma dúvida solicito ajuda.

Estou grato pelas dicas e orientações.


vector brasil[20];

int numero = Integer.parseInt(JOptionPane.showInputDialog(“Digite um número”));

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

if(! (num[i].getNumero_produto()== numero)

produto x= new Produto();

else System.out.println(“produto existente”);

*getNumero_produto()-> este metodo tem de retornar o numero do produto ou seja tens de ter um atributo para o numero do produto

T

Creio que eu tenha entendido como a Renata, e acho que a maneira mais fácil de você entender, já que está começando é pelo código dela, se o número (código), for igual a algum cadastrado, exibe uma mensagem adequada, lembrando de percorrer o vetor do começo ao fim (0 a 19).

Alkamavo

ai e o k foi que eu postei?
só entropia :oops:

RenataFA

Ops! Eu usei um vetor com 5 elementos pra testar e acabei colocando o código pra ele desse jeito… foi mal… :oops:

Alkamavo

Ops! Eu usei um vetor com 5 elementos pra testar e acabei colocando o código pra ele desse jeito… foi mal… :oops:

ah manda mal pra mim tb… :oops: :oops: :oops: :oops:

S

RenataFA, Alkamavo e Thiago Domingues obrigado pelas dicas e idéias de vocês, aproveitando, tenho um exemplo claro do que preciso.

1) Só posso vender uma passagem se e somente a mesma não estiver ocupada
public class passageiro{
	
	//Atributos
	private String nome, rg;
	private int poltrona;

	//Metodos de acesso getXxx
	public String getNome() {
		return nome;
	}
	public String getRg() {
		 return rg;
	}

	public int getPoltrona() {
		 return poltrona;
	}
	//Metodos de acesso setXxx
	public void setNome(String n) {
		 nome = n;
	}
	public void setRg(String r) {
		 rg = r;
	}

	public void setPoltrona(int p) {
		 poltrona = p;
	}
	
}
2) No método main criei três array 3) Aqui o usuário digita um número da poltrona, se a poltrona já estiver ocupada, o sistema envia mensagem "Poltrona ocupada", e ainda tenho que criar um método para verificar se a poltrona é do corredor ou janela.
import javax.swing.*;
public class usaPassageiro {	
	public static void main(String args[]){
		
		int i;
		passageiro p = new passageiro();		
		String aux_nome[] = new String[20];
		String aux_rg[] = new String[20];
		int aux_poltrona[] = new int[20];
		
		for(i=0;i<20;i++)
		{
			aux_nome[i] = JOptionPane.showInputDialog("Digite o nome");				
			aux_rg[i] = JOptionPane.showInputDialog("Digite o rg");
			aux_poltrona[i] = Integer.parseInt(
                                                         JOptionPane.showInputDialog("Digite a poltrona"));
			
			p.setNome(aux_nome[i]);
			p.setRg(aux_rg[i]);
			p.setPoltrona(aux_poltrona[i]);
		}
		
		for(i=0;i<3;i++)
		{
			System.out.println("Nome: " + p.getNome());
			System.out.println("Rg: " + p.getRg());
			System.out.println("Nome: " + p.getPoltrona());
			
		
		}
			
	} 
}
4) e depois armazenar os atributos num arquivo.txt. Tenho material do Guj e apostila estou vendo como vou fazer isso, porém sei que vocês conhecem, temo como criar um método para isso.

Acredito que ficou mais claro agora.

Att.
Sérgio

RenataFA

Ok, vamos tentar fazer vc "andar" mais um pouco no seu projetinho.

Uma dica: Use sempre nome de classes com a primeira letra em maiúscula. É um padrão de nomenclatura seguido, fica melhor.

Bem, agora vamos as suas classes:

- mantenha sua classe passageiro
- mude sua classe main para algo parecido com o exemplo que coloquei abaixo

import javax.swing.JOptionPane;

public class usaPassageiro{
	
        // array para armazenar seus passageiros
        static passageiro[] aPassageiros = new passageiro[20];
	
	public static void main(String args[]){
		
		// loop para pegar todos os passageiros
		for(int i=0;i<20;i++){
			String nome = JOptionPane.showInputDialog("Digite o nome");				
			String rg = JOptionPane.showInputDialog("Digite o rg");
			
			int poltrona = 0; // inicio como poltrona = 0
			while (poltrona == 0 || !poltronaLivre(poltrona)) // fico pedindo a poltrona até que ela seja diferente de 0 e desocupada
				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();
			p.setNome(nome);
			p.setRg(rg);
			p.setPoltrona(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());
		}

	}
	
	/**
	 * 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++){
			if (p == aPassageiros[i].getPoltrona()){
				System.out.println("Poltrona ocupada!!!");
				return false;
			}
		}
		
		return true;
	}
}

Olha, na sinceridade, não tive tempo de testar, mas veja que deve ser algo por ai.

peczenyj

É possivel converter um array em uma lista e, assim, verificar se contem algum elemento:

import java.util.Arrays;

public class A{
        public static void main (String... x){
                Integer y[] = new Integer[]{1,2,3};

                System.out.println("contem 3? " + Arrays.asList(y).contains(3));
                System.out.println("contem 5? " + Arrays.asList(y).contains(5));
        }
}
$ java A
contem 3? true
contem 5? false
RenataFA

[quote=everson_z]

.RenataFA:

/**
 * 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){
	...
	return true;
}

}

Isso esta certo?

@param p

:?:

Vc se refere ao @param p ?

Qual o problema com ele? Pq não estaria certo?!

RenataFA

Não everson!

Eu criei isso ai correndo só pra criar um exemplo pro nosso amigo com problema. Eu NUNCA criaria uma variável com o nome de “p”. Eu não fiz comentários adequados, eu apenas digitei /**<enter> (para escrever o comentário) e o Eclipse colocou o resto sozinho.

Eu não estava ensinando ngn a fazer comentários adequados e não programei esse trechinho de código pensando em como ficaria a documentação. Eu nem salvei isso ai, só fiz na IDE pra ficar mais alinhado e evitar erro de sintaxe!

Alkamavo

O eclipse tem a mani de criar isso para incentivar os newbissimos a criar Documentação…basta criares uma nova class e akilo aprece sempre…

S

Pessoal, estou começando minha caminhada em orientação a objetos, para ser sincero estou utilizando o JCreator para desenvolver os trabalhos e pretendo me aprofundar cadas vez mais em Java.

RenataFA, eu executei a classe principal main e apresentou erro de compilação e não consegui identificar o seguinte erro

Exception in thread main java.lang.NullPointerException

at usaPassageiro.poltronaLivre(usaPassageiro.java:47)

at usaPassageiro.main(usaPassageiro.java:16)

Não sei se é nessa linha
// fico pedindo a poltrona até que ela seja diferente de 0 e desocupada
while (poltrona == 0 || !poltronaLivre(poltrona))

Também estou desenvolvendo uma classe para inserir no arquivo, depois vou postar aqui para saber opnião de vocês que conhencem e tem vivência em programação.

Grato
Sérgio

RenataFA

Esqueci de uma consistência. Tente agora:

import javax.swing.JOptionPane;

public class UsaPassageiro{
	
	static Passageiro[] aPassageiros = new Passageiro[20];
	
	public static void main(String args[]){
		
		// loop para pegar todos os passageiros
		for(int i=0;i<20;i++){
			String nome = JOptionPane.showInputDialog("Digite o nome");				
			String rg = JOptionPane.showInputDialog("Digite o rg");
			
			int poltrona = 0; // inicio como poltrona = 0
			while (poltrona == 0 || !poltronaLivre(poltrona)) // fico pedindo a poltrona até que ela seja diferente de 0 e desocupada
				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());
		}

	}
	
	/**
	 * 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á 20 posições, ele percorre até 20, 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!!!");
				return false;
			}
		}
		
		return true;
	}
	
	public static 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) {
			 this.poltrona = poltrona;
		}
	}	
	
}
S

RenataFA, obrigado pela ajuda, só daqui um tempo vou ser seu concorrente hein!!!!! brincadeira
É que cada vez estou gostando mais de Java.


Criei esse método para inserir em um arquivo, seria mais ou menos isso mesmo?

public static void insereNoArquivo(String nome, String rg, int poltrona){
		File f= new File("arq.txt");

		try{
			FileWriter fw = new FileWrite(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");
		}
}
RenataFA

OLha, aparentemente é isso msm. Vc testou? Está gravando?

cassio

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:

S

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 …

cassio

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 …

A principio está ok sim :slight_smile:

S

Pessoal, criei o método inseriNoArquivo conforme classe abaixo

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");
		}
	}
           
 }

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

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;   
    }
    
}

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

cassio

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

S

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

cassio

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

S

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
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;   
    }
}
cassio

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

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

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:

xan

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.

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");  
        }  
}

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.

S

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:

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");
	}
}
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.

RenataFA

Ué?!

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

Bom, tenta assim:

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

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

Fiz algumas consistências nos metodos sets

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;   
      }

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"

Marky.Vasconcelos
Sergio Prado:
Renata mais uma vez obrigado, sempre ajudando na lógica.

Fiz algumas consistências nos metodos sets

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;      
                 }
        }       
  
      ...

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

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:

S

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

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;   
    }
    
   
}
RenataFA

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

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;   
}
S

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

everson_z

Isso esta certo?

@param p

:?:

everson_z

RenataFA:

Vc se refere ao @param p ?

Qual o problema com ele? Pq não estaria certo?!

É bem off
Na documentação, como você saberia o que é o (p) ? Seu IDE cria automático o tipo?

* ...
* @param p int
* @return
*/
Criado 26 de novembro de 2007
Ultima resposta 27 de nov. de 2007
Respostas 41
Participantes 10