Array, cadastro

25 respostas
S

Gostaria de saber como posso fazer um cadastro, usando um array com as informações:

código do desenho, nome do desenho, classificação de faixa etária.

Tentei fazer o seguinte:

import javax.swing.JOptionPane;

public class DesenhosAnimados {

    // array de Desenhos
    private static String[] listaDesenhos;
    private static String menu = "CADASTRO DE DESENHOS ANIMADOS\n\n"
            + "1 --> Cadastrar Desenhos\n"
            + "2 --> Alterar todos os dados pelo código\n"
            + "3 --> Listar desenhos por faixa etária\n"
            + "4 --> Sair";

    public static void main(String[] args) {

        // escolha do usuario
        String opcao = "";

        do {

            opcao = JOptionPane.showInputDialog(menu);

            if (opcao.equals("1")) {

                // cadastrar Desenhos

                cadastrarDesenho();

            } else if (opcao.equals("3")) {

                // listar Desenhos

                listarDesenho();

            }

        } while (!opcao.equals("7")); // comparacao usando String

    } // fim do main


    
    private static void listarDesenho() {

        if (listaDesenhos != null) {

            String ListaDesenhosTemporario = "Lista de Clientes \n\n";

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

                ListaDesenhosTemporario += listaDesenhos[i] + "\n";

            }

            // exibe na tela a listagem de clientes
            JOptionPane.showMessageDialog(null, ListaDesenhosTemporario);

        } else {

            JOptionPane.showMessageDialog(null,
                    "Nenhum registro encontrado?");

        }

    }
    
    
     private static void cadastrarDesenho() {
         
         
         int quantidade = Integer.parseInt(JOptionPane.showInputDialog("Quantos Desenhos deseja cadastrar?"));
         int codigo = 0;
         String nome = "";
         
         // inicializa o ARRAY com tamanho informado pelo usuario
         listaDesenhos = new String[quantidade];
         
         // percorre todo tamanho do ARRAY e cadastra seus elementos
          for (int i = 0; i < quantidade; i++) {
         listaDesenhos[i] = JOptionPane.showInputDialog("Código do desenho " + (i + 1));

          listaDesenhos[i] = JOptionPane.showInputDialog("Nome do desenho " + (i + 1));

  listaDesenhos[i] = JOptionPane.showInputDialog("Classificação de faixa etária " + (i + 1));

          }
         JOptionPane.showMessageDialog(null, "Desenhos cadastrados");
     }
Sei que o problema deve estar aqui, não consigo ver uma solução usando o matriz ou vetor.
// inicializa o ARRAY com tamanho informado pelo usuario
         listaDesenhos = new String[quantidade];
         
         // percorre todo tamanho do ARRAY e cadastra seus elementos
          for (int i = 0; i < quantidade; i++) {
         listaDesenhos[i] = JOptionPane.showInputDialog("Código do desenho " + (i + 1));

          listaDesenhos[i] = JOptionPane.showInputDialog("Nome do desenho " + (i + 1));

  listaDesenhos[i] = JOptionPane.showInputDialog("Classificação de faixa etária " + (i + 1));

          }
         JOptionPane.showMessageDialog(null, "Desenhos cadastrados");

25 Respostas

sowyer

Cara… tá muito confuso o teu programa ai … me diga uma coisa … qual é o erro que dá ?

E uma dica… coloca o código fonte entre as tags [ code ] e [ / code ] … pq da forma como está, ninguém se interessa em ler…

S

É um programa de cadastro usando vetores ou matrizes.
Tenho que cadastrar nome, código e classificação de faixa etária e armazenar. Depois tenho que listar para ver quais desenhos estão cadastrados

Esse é apenas um menu

import javax.swing.JOptionPane; 

public class DesenhosAnimados { 

// array de Desenhos 
private static String[] listaDesenhos; 
private static String menu = "CADASTRO DE DESENHOS ANIMADOS\n\n" 
+ "1 --> Cadastrar Desenhos\n" 
+ "2 --> Alterar todos os dados pelo código\n" 
+ "3 --> Listar desenhos por faixa etária\n" 
+ "4 --> Sair";

Para o usuario escolher a opção dada ao menu

public static void main(String[] args) { 

// escolha do usuario 
String opcao = ""; 

do { 

opcao = JOptionPane.showInputDialog(menu); 

if (opcao.equals("1")) { 

// cadastrar Desenhos 

cadastrarDesenho(); 

} else if (opcao.equals("3")) { 

// listar Desenhos 

listarDesenho(); 

} 

} while (!opcao.equals("7")); // comparacao usando String 

} // fim do main

Listar os desenhos cadasttrados

private static void listarDesenho() { 

if (listaDesenhos != null) { 

String ListaDesenhosTemporario = "Lista de Clientes \n\n"; 

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

ListaDesenhosTemporario += listaDesenhos[i] + "\n"; 

} 

// exibe na tela a listagem de clientes 
JOptionPane.showMessageDialog(null, ListaDesenhosTemporario); 

} else { 

JOptionPane.showMessageDialog(null, 
"Nenhum registro encontrado?"); 

} 

}

Para Cadastrar
Esse é o código que dá erro. O erro é que não armazena codigo do desenho e nem o nome, somente classificação etária

// inicializa o ARRAY com tamanho informado pelo usuario 
listaDesenhos = new String[quantidade]; 

// percorre todo tamanho do ARRAY e cadastra seus elementos 
for (int i = 0; i < quantidade; i++) { 
listaDesenhos[i] = JOptionPane.showInputDialog("Código do desenho " + (i + 1)); 

listaDesenhos[i] = JOptionPane.showInputDialog("Nome do desenho " + (i + 1)); 

listaDesenhos[i] = JOptionPane.showInputDialog("Classificação de faixa etária " + (i + 1)); 

} 
JOptionPane.showMessageDialog(null, "Desenhos cadastrados");
sowyer

Vamos por partes. Você precisa cadastrar os desenhos animados certo ? E os mesmos possuem os seguintes atributos: nome, código e classificação correto ?

Então, de cara, pq vc não cria uma classe DesenhoAnimado para “agregar” essas informações ?

Algo como:

public class DesenhoAnimado {
	private int codigo;
	private String nome;
	private String classificacao; // Aqui, o ideal seria uma Enum com somente as classificações possiveis...
	
	// gets e sets para os atributos...
}

Com a sua classe de entidades em mãos, você agora precisa de uma classe que irá meio que “gerenciar” os dados. Ou seja, vc precisa de um Dao ( não necessariamente um dao, mas ajuda…)

Você precisa criar uma classe que irá ficar responsável por realizar as operações com as entidades DesenhoAnimado. Ou seja, inserir, remover e listar.

Algo como:

public class DaoDesenhoAnimado {
	private Map<int codigo, DesenhoAnimado desenho> desenhos;
	
	public DaoDesenhoAnimado() {
		desenhos = new HashMap<int codigo, DesenhoAnimado desenho>();
	}
	
	public void cadastrarDesenhoAnimado(DesenhoAnimado desenho) {
		desenhos.put(desenho.getCodigo(), desenho);
	}
	
	public DesenhoAnimado recuperarDesenhoAnimado(int codigo) {
		desenhos.get(codigo); 
	}
	
	public  Collection<DesenhoAnimado> listarTodosDesenhosAnimados() {
		desenhos.getValues();
	}
	
}

Pronto! Agora você já tem a sua entidade, e uma classe que a gerência com relação as operações que devem ser suportadas pela app. Agora, basta ter uma classe principal que irá “orquestrar” o fluxo ( o vulgo menu ).

Algo como:

public class Principal {
	private static final DaoDesenhoAnimado dao = new DaoDesenhoAnimado();
	private static int codigo = 0;
	private static final String MENU = "CADASTRO DE DESENHOS ANIMADOS\n\n"   
	+ "1 --> Cadastrar Desenhos\n"   
	+ "2 --> Alterar todos os dados pelo código\n"   
	+ "3 --> Listar desenhos por faixa etária\n"   
	+ "4 --> Sair";
	
	public static void main(String[] args) {
		
		do {
			int opcao = Integer.parseInt(JOptionPane.showInputDialog(MENU));
			switch(opcao) {
				case 1:
					cadastrarDesenhoAnimado();
					break;
				case 2: 
					alterarDesenhosAnimados();
					break;
				case 3:
					listarDesenhosAnimados();
					break;
				case 4:
					break;
				default:
					JOptionPane.showMessageDialog(null, "Você deve escolher uma opção do menu!");				
			}
			
		} while(opcao != 4) ;
		
	}
	
	private static void cadastrarDesenhoAnimado() {
		DesenhoAnimado desenho = new DesenhoAnimado();
		String nome = JOptionPane.showInputDialog("Qual o nome do desenho ?");
		String classificacao = JOptionPane.showInputDialog("Qual a classificação do desenho ?");
		
		desenho.setCodigo(codigo++);
		desenho.setNome(nome);
		desenho.setClassificacao(classificacao);
		
		dao.cadastrarDesenhoAnimado(desenho);
	
		JOptionPane.showMessageDialog(null, "O desenho " + desenho.getNome() + " foi cadastrado corretamente!");
	}
	
	private static void listarDesenhosAnimados() {
		List<DesenhoAnimado> desenhos = new ArrayList<DesenhoAnimado>(dao.listarTodosDesenhosAnimados());
		
		for(DesenhoAnimado desenho : desenhos) {
			// Tô com preguiça... aqui vc adiciona a logica para exibição recuperando os atributos 
			// através dos métodos gets respectivos ... :D 
		}
	}
	
	private static void alterarDesenhosAnimados() {
		DesenhoAnimado desenho;
		
		int codigoAPesquisar = Integer.parseInt(JOptionPane.showInputDialog("Qual o código do desenho a ser alterado ?"));
		if(dao.recuperarDesenhoAnimado(codigoAPesquisar) != null) {
			// Mostra a msg que não existe o cara ...
		} else {
			// recupera o objeto, pergunta o que ele quer mudar. Depois chama o metodo:
			dao.cadastrarDesenhoAnimado(desenho);
		}
	}
}

Lembre-se ! Eu escrevi isso no TextMate enquanto eu comia banana caramelada com coca-cola ( é … eu tenho gostos estranhos . :smiley: ). Não me preocupei muito com sintaxe e tudo mais. A ideia aqui é mostrar mais ou menos o que vc pode fazer. Veja se isso lhe ajuda… qualquer coisa, vamos resolvendo os “por menores” por aqui.

S

Cara acredito que era tão fácil pra vc que vc digitou com os pés, ja que com uma mão você segurava a banana e com a outra a coca - cola kkkk.

sowyer Obrigadão, vc praticamente fez o exercíco todo para mim. Mas tem um problema acadêmico, o professor ainda não falou a respeito desse Dao, então acho que não poderia usa - lo.

O que ele quer é que eu armazene os dados colhidos do usuario em uma matriz ou vetor algo do tipo e depois no menu liste, altere essas informações do desenho

Esse é o anunciado,
[color=blue]Cadastro de desenhos animados Informações presentes no cadastro: código do desenho, nome do desenho, classificação de faixa etária, ano de criação do desenho, tempo de duração, quantidade em estoque, valor do DVD do desenho.
a) Opção para cadastro do desenho
b) Opção para alterar todos os dados pelo código
c) Opção para listar todos os desenhos por uma faixa etária
d) Opção para mostrar o desenho mais antigo de uma faixa etária
e) Opção para mostrar o total de valor em estoque (qtde em estoque * valor do DVD)
f) Opção para mostrar a média de tempo de duração de todos os desenhos

Observação: Não utilizar meios que não foi ensinado na sala de aula (banco de dados, orientação a objetos, etc…)[/color]

Lembre-se ! Nem almocei, só um copo de água, to tentando fazer esse projeto desde a 7 da mnhã, mas como sou iniciante no mundo da programação, ta osso!!! Obrigado pela compreensão.

sowyer

hahahaha… agora ri… Bicho … nem OO pode usar ? Então me diz uma coisa… tem que fazer tudo em uma classe só é ?

Ou posso pelo menos dividir em classes ? ( a classe principal que conterá o menu, e os métodos que correspondem a cada uma das opções )

Tenha fé homi … vc vai conseguir … vamos discutindo os detalhes que o bicho sai …

S

Pois é cara, se fosse com orientação acho que ja tinha feito, tem bastante coisa na net,

mas do jeito que os prof querem é fod. Mas sim, pode dividir classes se houver necessidade

sowyer

Blz… então pode existir uma classe DesenhoAnimado que irá conter os atributos código do desenho, nome do desenho, classificação de faixa etária, ano de criação do desenho, tempo de duração, quantidade em estoque, valor do DVD do desenho.

E uma classe que é o programa em si certo ?

Então deve haver um array de DesenhosAnimados para serem inseridos os Desenhos que forem sendo cadastrados correto ? Ou não pode ser assim ?

S

Exatamente isso , o que não pode é (herança, interface etc) eu acho.

Você pode fazer apenas 3 atributos, o restante ( classificação de faixa etária, ano de criação do desenho, tempo de duração, quantidade em estoque, valor do DVD do desenho. ) eu me viro

sowyer

SuperGelson,

Rapz… eu modifiquei o código que tinha colocado pra usar um array de Strings pra armazenar os filmes.

Ficou assim:

public class Principal {
	
	// Estrutura de dados que armazenará os dados dos filmes ... 
	private static String[][] desenhosAnimados;
	
	// Indices dos campos dos desenhos ...
	private static final int CODIGO = 0;
	private static final int NOME = 1;
	private static final int CLASSIFICACAO = 2;
	private static final int ANO = 3;
	private static final int TEMPO = 4;
	private static final int QTD_ESTOQUE = 5;
	private static final int VALOR = 6;
	
	// String do menu ...
	private static final String MENU = "CADASTRO DE DESENHOS ANIMADOS\n\n"   
	+ "1 --> Cadastrar Desenhos\n"   
	+ "2 --> Alterar todos os dados pelo código\n"   
	+ "3 --> Listar desenhos por faixa etária\n"   
	+ "4 --> Sair";
	
	public static void main(String[] args) {
		
		do {
			int opcao = Integer.parseInt(JOptionPane.showInputDialog(MENU));
			switch(opcao) {
				case 1:
					cadastrarDesenhoAnimado();
					break;
				case 2: 
					alterarDesenhosAnimados();
					break;
				case 3:
					listarDesenhosAnimados();
					break;
				case 4:
					break;
				default:
					JOptionPane.showMessageDialog(null, "Você deve escolher uma opção do menu!");				
			}
			
		} while(opcao != 4) ;
		
	}

.
.
.

Note que AGORA… a estrutura utilizada para “guardar” os vagabundos dos filmes é um array de Strings. Logo após a declaração do mesmo, eu inclui uma identificação para cada indice da matriz que corresponde ao “atributo” do filme. Isso pra não ficar com “numeros magicos” no meio do código e facilitar a leitura do mesmo. Isso deveria ser uma ENUM mas não sei vc se pode usar … então foi no braço mesmo …

Agora vamos ao método que cadastra os filmes:

private static void cadastrarDesenhoAnimado() {
		String nome;
		String classificacao;
		String ano;
		String tempoDeDuracao;
		String qtdEstoque;
		String valor;
		int quantidadeDeCadastros = Integer.parseInt(JOptionPane.showInputDialog("Quantos desenhos animados você quer cadastrar ?"));
		desenhosAnimados = new String[quantidadeDeCadastros][7];		
		for(int i=0; i<desenhosAnimados.length; i++) {
			nome = JOptionPane.showInputDialog("Qual o nome do desenho ?");
			classificacao = JOptionPane.showInputDialog("Qual a classificação do desenho ?");
			ano = JOptionPane.showInputDialog("Qual o ano de lanámento do filme ?");
			tempoDeDuracao = JOptionPane.showInputDialog("Qual o tempo de duração ?");
			qtdEstoque = JOptionPane.showInputDialog("Qual a quantidade em estoque ?");
			valor = JOptionPane.showInputDialog("Qual o valor do aluguel para este filme ?");
			
			desenhosAnimados[i][CODIGO] = (i+1); // O código é o valor do i. 1, 2, 3, etc ...
			desenhosAnimados[i][NOME] = nome;
			desenhosAnimados[i][CLASSIFICACAO] = classificacao;
			desenhosAnimados[i][ANO] = ano;
			desenhosAnimados[i][TEMPO] = tempoDeDuracao;
			desenhosAnimados[i][QTD_ESTOQUE] = qtdEstoque;
			desenhosAnimados[i][VALOR] = valor;
		}
		
		JOptionPane.showMessageDialog("Todos os Desenhos foram cadastrados com sucesso !");
	}

Note que o desgraçado mudou bastante !!! Eu confesso que essa de usar Matrizes ou coisa do tipo é muito seboso … mas é o que tem pra hj né ? … Enfim … explicando um pouco por cima… basicamente, eu armazeno um filme por LINHA da matriz. As colunas são os atributos. Logo, um registro se parece com isso:

0 - 1 | Shrek | 10 anos | 2012 | 1:23 | 4 | R$ 3,00
1 - 2 | Noiva Cadaver | 18 anos | 1988 | 2:10 | 10 | R$ 1,00
.
.
.

Já o método alterar pode se parecer com isso:

private static void alterarDesenhosAnimados() {

		String codigoAPesquisar = JOptionPane.showInputDialog("Qual o codigo do filme a ser alterado ?");

		for(int i=0; i<desenhosAnimados.length; i++) {
			if(desenhosAnimados[i][CODIGO].equals(codigoAPesquisar)) {
				String codigo = desenhosAnimados[i][CODIGO];
				
				String nome = JOptionPane.showInputDialog("Qual o novo nome do filme de código [" + codigo + "].");
				String classificacao = JOptionPane.showInputDialog("Qual o nova classificação do filme de código [" + codigo + "].");
				// Demais campos ...
				
				desenhosAnimados[i][NOME] = nome;
				desenhosAnimados[i][CLASSIFICACAO] = classificacao;
				// Demais campos atribuidos ... 
			}
		}
	}

Note que eu faço uma busca pelo campo CODIGO ( que na verdade é a coluna 0 da matriz ) e verifico se é igual ao fornecido ao JOptionPane. Se for, eu pergunto todas as informações de novo e armazeno na MESMA posição onde eu ACHEI o infeliz. Dai vc está alterando os dados de um filme previamente cadastrado.

E o listar pode ser mais ou menos assim:

private static void listarDesenhosAnimadosPorFaixa() {

		String classificacaoAPesquisar = JOptionPane.showInputDialog("Qual a faixa dos filmes ?");

		for(int i=0; i<desenhosAnimados.length; i++) {
			if(desenhosAnimados[i][CLASSIFICACAO].equals(classificacao)) {
				// aqui tu  achou o cara, e é  recuperar os dados das colunas, e imprimir da forma que o Sr quiser ! 
			}
		}
	}

Essa é uma linha de raciocínio onde vc usaria uma Matriz ( de String ) no caso de separar a classe que contem os atributos, ai vc NÃO vai precisar de uma Matriz. Somente de um Array de DesenhosAnimados.

Veja se ajuda … qualquer coisa, vai postando ai as duvidas que agente desenrrola…

S

Perfeito, vou testar e adaptar algumas coisas dpois posto

OBRIGADÃO

sowyer

Essa é a ideia chefe ! Uma funcionalidade por vez… rode, teste, se der exceção, cole aqui … post suas duvidas que esse é o caminho … eu poderia ter feito tudo, mas onde estaria a graça né ? hahaha… relaxa… vai dar certo.

S

Eu aqui de novo. Eis o meu código

import javax.swing.JOptionPane;

public class Principal {

    // Estrutura de dados que armazenará os dados dos filmes ...   
    private static String[][] desenhosAnimados;
    // Indices dos campos dos desenhos ...  
    private static final int CODIGO = 0;
    private static final int NOME = 1;
    private static final int CLASSIFICACAO = 2;
    private static final int ANO = 3;
    private static final int TEMPO = 4;
    private static final int QTD_ESTOQUE = 5;
    private static final int VALOR = 6;
    // String do menu ...  
    private static final String MENU = "CADASTRO DE DESENHOS ANIMADOS\n\n"
            + "1 --> Cadastrar Desenhos\n"
            + "2 --> Alterar todos os dados pelo código\n"
            + "3 --> Listar desenhos por faixa etária\n"
            + "4 --> Mostrar o desenho mais antigo de uma faixa etária\n"
            + "5 --> Mostrar o total de valor em estoque (qtde em estoque * valor do DVD)\n"
            + "6 --> Opção para mostrar a média de tempo de duração de todos os desenhos\n"
            + "7 --> Sair";
    // private static Object classificacao;
    // private static int opcao;

    public static void main(String[] args) {


        // escolha do usuario
        String opcao = "";

        do {

            opcao = JOptionPane.showInputDialog(MENU);
            switch (opcao) {
                case "1":
                    // cadastrar Desenhos
                    cadastrarDesenhoAnimado();
                    break;

                case "2":
                    // Alterar Desenhos
                    // AlterarDadosCodigoDesenhoAnimado();
                    break;

                case "3":
                    // listar Desenhos
                    listarDesenhoFaixaEtaria();
                    
                    break;

                case "4":
                  
                    //mostrarDesenhoAntigo();
                    
                    break;

                case "5":
                   
                    //mostrarTotalValor();
                    
                    break;

                case "6":
                    
                    //mostrarMediaTempo();
                    
                    break;

                case "7":
                default:
                    JOptionPane.showMessageDialog(null, "Você está saindo do programa cadastro!");
            }

        } while (!opcao.equals("7")); // comparacao usando String

    } // fim do main

    private static void cadastrarDesenhoAnimado() {
        int codigo = 0;
        String nome;
        String classificacao;
        String ano;
        String tempoDeDuracao;
        String qtdEstoque;
        String valor;
        int quantidadeDeCadastros = Integer.parseInt(JOptionPane.showInputDialog("Quantos desenhos animados você quer cadastrar ?"));
        desenhosAnimados = new String[quantidadeDeCadastros][7];
        for (int i = 0; i < desenhosAnimados.length; i++) {
            nome = JOptionPane.showInputDialog("Qual o nome do desenho ?");
            classificacao = JOptionPane.showInputDialog("Qual a classificação do desenho ?");
            ano = JOptionPane.showInputDialog("Qual o ano de lançamento do filme ?");
            tempoDeDuracao = JOptionPane.showInputDialog("Qual o tempo de duração ?");
            qtdEstoque = JOptionPane.showInputDialog("Qual a quantidade em estoque ?");
            valor = JOptionPane.showInputDialog("Qual o valor do aluguel para este filme ?");

            codigo = (i + 1);
            desenhosAnimados[i][CODIGO] = Integer.toString(codigo); // O código é o valor do i. 1, 2, 3, etc ...  
            desenhosAnimados[i][NOME] = nome;
            desenhosAnimados[i][CLASSIFICACAO] = classificacao;
            desenhosAnimados[i][ANO] = ano;
            desenhosAnimados[i][TEMPO] = tempoDeDuracao;
            desenhosAnimados[i][QTD_ESTOQUE] = qtdEstoque;
            desenhosAnimados[i][VALOR] = valor;
        }

        JOptionPane.showMessageDialog(null, "Todos os Desenhos foram cadastrados com sucesso !");
    }

    
    
    private static void listarDesenhoFaixaEtaria() {

        String classificacaoAPesquisar = JOptionPane.showInputDialog("Qual a faixa etária deseja exibir ?");

        for (int i = 0; i < desenhosAnimados.length; i++) {
            if (desenhosAnimados[i][CLASSIFICACAO].equals(classificacao)) {
                // aqui tu já achou o cara, e é só recuperar os dados das colunas, e imprimir da forma que o Sr quiser !   
            }
        }
    }

    
    
    
    private static void alterarDesenhosAnimados() {

        String codigoAPesquisar = JOptionPane.showInputDialog("Qual o codigo do filme a ser alterado ?");

        for (int i = 0; i < desenhosAnimados.length; i++) {
            if (desenhosAnimados[i][CODIGO].equals(codigoAPesquisar)) {
                String codigo = desenhosAnimados[i][CODIGO];

                String nome = JOptionPane.showInputDialog("Qual o novo nome do filme de código [" + codigo + "].");
                String classificacao = JOptionPane.showInputDialog("Qual o nova classificação do filme de código [" + codigo + "].");
                // Demais campos ...  

                desenhosAnimados[i][NOME] = nome;
                desenhosAnimados[i][CLASSIFICACAO] = classificacao;
                // Demais campos atribuidos ...   
            }
        }
    }
   
}

Esta ocorrendo erro nessa parte

private static void listarDesenhoFaixaEtaria() {

        String classificacaoAPesquisar = JOptionPane.showInputDialog("Qual a faixa etária deseja exibir ?");

        for (int i = 0; i < desenhosAnimados.length; i++) {
            if (desenhosAnimados[i][CLASSIFICACAO].equals(classificacao)) {
                // aqui tu  achou o cara, e é  recuperar os dados das colunas, e imprimir da forma que o Sr quiser !   
            }
        }
    }

No caso (classificacao) que esta dando erro (esta com a cobrinha vermelha embaixo)

Também não entendi essa parte

// aqui tu já achou o cara, e é só recuperar os dados das colunas, e imprimir da forma que o Sr quiser !
S

Esse é o erro

run: Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - Erroneous tree type: <any> at Principal.listarDesenhoFaixaEtaria(Principal.java:119) at Principal.main(Principal.java:50) Java Result: 1 CONSTRUÍDO COM SUCESSO (tempo total: 29 segundos)

sowyer

Tá … é pq o correto seria usar a variável “classificacaoAPesquisar”. O nome dela, antes de eu mudar, era classificacao apenas. Dai eu mudei para classificacaoAPesquisar e esqueci de mudar no equals.

sobre a linha:

// aqui tu já achou o cara, e é só recuperar os dados das colunas, e imprimir da forma que o Sr quiser !

Quer dizer que se você entrar no if, quer dizer que foi encontrado, dentre os desenhos animados cadastrados, um que a classificação bate ( exemplo, “18 anos” ). Logo, é dentro do if que vc deve executar a lógica desejada. No caso, listar os filmes.

Um exemplo:

String nome;
for (int i = 0; i < desenhosAnimados.length; i++) {  
        if (desenhosAnimados[i][CLASSIFICACAO].equals(classificacao)) {  
                JOptionPane.showMessageDialog(desenhosAnimados[i][CODIGO] + desenhosAnimados[i][NOME] + [demais campos]);
        }  
}

Lembrando que esse método é referente a implementação da funcionalidade ‘c’.

c) Opção para listar todos os desenhos por uma faixa etária

Entendeu mais ou menos ? A funcionalidade Cadastrar já está ok ? Testou ?

S

Cadastrar ta ótima,

Obrigado

S

c

S

Cadastrar está ótimo,

vou terminar amanhã (eu acho)

Obrigado

sowyer

Fé homem ! Fé !! :smiley:

Precisando estamos as ordens !

S

Tentei fazer o mostra o desenho mais antigo da faixa etária, mas não consegui

private static void mostrarDesenhoMaisAntigoFaixaEtária() {
       

        String classificacaoAPesquisar = JOptionPane.showInputDialog("Qual a faixa etária deseja exibir ?");
        String mostrarDesenhoAntigo =  desenhosAnimados[0][0];
        
     
                int maior = 0;
  
        for (int i = 0; i < desenhosAnimados.length; i++) {
            
            
             if (desenhosAnimados[i][CLASSIFICACAO].equals(classificacaoAPesquisar)) {

                JOptionPane.showMessageDialog(null,
                        " Você escolheu a classificação  " + desenhosAnimados[i][CLASSIFICACAO] + "\n");

      
            
          if (i > maior){
              
             mostrarDesenhoAntigo = desenhosAnimados[i][ANO];
       
          }
            
             } 
           
        }
            
          JOptionPane.showMessageDialog(null,mostrarDesenhoAntigo); 
        }

    }
sowyer

Opa supergelson,

desculpe a demora camarada… fds + segunda feira é tenso.

Seguinte… tenta desta forma:

private static void mostrarDesenhoMaisAntigoFaixaEtaria() {
	String classificacaoAPesquisar = JOptionPane.showInputDialog("Qual a faixa etária deseja exibir ?");  

      	int posicaoDoMaisAntigo = 0;
	int maisAntigoAtualmente = 0;
	
      	for (int i = 0; i < desenhosAnimados.length; i++) {   
		if (desenhosAnimados[i][CLASSIFICACAO].equals(classificacaoAPesquisar)) {  
  
              		int anoDoFilme = Integer.parseInt(desenhosAnimados[i][ANO]);
			
			if(anoDoFilme < maisAntigoAtualmente) {
				// Guarda a posição do filme mais antigo do array para ser exibido no fim.
				posicaoDoMaisAntigo = i;
				// Atualiza o valor do mais antigo...
				maisAntigoAtualmente = anoDoFilme ;
			}
     		}            
      	}  
         
        JOptionPane.showMessageDialog(null,"Filme Mais antigo: " + desenhosAnimados[posicaoDoMaisAntigo][NOME] + ", ano: " + desenhosAnimados[posicaoDoMaisAntigo][ANO]);
      }  
}

Deve funcionar. A lógica é a seguinte:

Você deve buscar somente entre os filtmes que a classificação for a mesma informada pelo usuário no prompt. E isso é feito nesse if :

if (desenhosAnimados[i][CLASSIFICACAO].equals(classificacaoAPesquisar)) {  ...  }

DEPOIS de identificado que o filme da posição i ( note que a posição é UNICA para cada filme ) é da classificação procurada… vc TEM QUE analisar o ANO do filme ( afinal de contas, é pelo atributo ANO que nós vamos saber quem é o mais antigo ), e saber que:

"Se o ano que eu acabei de recuperar foi MENOR que o ano que eu tenho ( guardado da ultima pesquisa ) eu devo trocar o valor do meu ano mais antigo por esse ano que eu estou analisando. Além disso, eu preciso guardar a posição desse filme com o MENOR ano do array ( uma das zilhões de possíveis soluções ) para que eu possa voltar no array no fim do processo somente para exibir os dados do filme.

Basicamente é um SELECT… vou percorrer todo o array, e no fim, vou ter guardado a posição do filme que tem o MENOR ano, dentro daquela categoria informada pelo usuário.

Veja se funciona ( Eu não testei ) …

S

Sem problemas, responda quando você puder.

Vi alguns exemplos aqui mesmo no forum, só que com vetor uni, tentei e não deu certo com matriz.

Seu exemplo Deu Certo.

Mas fiquei confuso e com dúvidas em uma parte (lógica).

//Qual seria o ano do filme aqui?
int anoDoFilme = Integer.parseInt(desenhosAnimados[i][ANO]);  
              
            //No caso aqui, maisAntigoAtualmente =0, se no cadastro tiver ano=1980
//anoDoFilme não vai ser menor do maisAntigoAtualmente então a condição seria falsa não é?
//E nãoguardaria os valores
            if(anoDoFilme < maisAntigoAtualmente) {  
                // Guarda a posição do filme mais antigo do array para ser exibido no fim.  
                posicaoDoMaisAntigo = i;  
                // Atualiza o valor do mais antigo...  
                maisAntigoAtualmente = anoDoFilme ;
S

Ou seja

int maisAntigoAtualmente = 0; então

anoDoFilme nunca iria ser < maisAntigoAtualmente

sowyer

Sem problemas, responda quando você puder.

Vi alguns exemplos aqui mesmo no forum, só que com vetor uni, tentei e não deu certo com matriz.

Seu exemplo Deu Certo.

Mas fiquei confuso e com dúvidas em uma parte (lógica).

//Qual seria o ano do filme aqui?
int anoDoFilme = Integer.parseInt(desenhosAnimados[i][ANO]);  
              
            //No caso aqui, maisAntigoAtualmente =0, se no cadastro tiver ano=1980
//anoDoFilme não vai ser menor do maisAntigoAtualmente então a condição seria falsa não é?
//E nãoguardaria os valores
            if(anoDoFilme < maisAntigoAtualmente) {  
                // Guarda a posição do filme mais antigo do array para ser exibido no fim.  
                posicaoDoMaisAntigo = i;  
                // Atualiza o valor do mais antigo...  
                maisAntigoAtualmente = anoDoFilme ;  






Vamos por partes...

[quote=supergelson]
[code]
//Qual seria o ano do filme aqui?
int anoDoFilme = Integer.parseInt(desenhosAnimados[i][ANO]);
[/quote]

Aqui, a variável anoDoFilme irá assumir o valor do ANO do filme previamente cadastrado. Vamos supor que vc cadastrou 2 filmes:

// assuma que esses são os dados do array, só que vistos mais bonitinhos....

----------+----------------------------+-------+--------------------+
CODIGO    | NOME                          | ANO  | CLASSIFICACAO | 
----------+----------------------------+-------+--------------------+
1         |  Filme 01                 | 1800  | 14 anos       | i = 0
2         |  Filme 02                 | 1980  | 18 anos       | i = 1
3         |  Filme 03                 | 1970  | 18 anos       | i = 2
----------+----------------------------+-------+--------------------+

Se o usuário buscar os filmes pela categoría 18 anos o que irá acontecer é o seguinte:

dentro do for, só entrará no if os filmes em que a posição do matriz "desenhosAnimados[i][CLASSIFICACAO]" for igual. Certo .. isso já sabemos. Então, ele irá ignorar o primeiro filme ( pq não possui o valor do campo desenhosAnimados[i][CLASSIFICACAO] igual a 18.

Na segunda iteração, ele entrará no if, e a variável "anoDoFilme" irá receber o valor 1980. Ele recebe esse valor pq ele recupera o que estiver nessa posição ( desenhosAnimados[i][ANO] ), para a linha do array que está sendo processada. No caso, é a 2 linha ( i = 1 ), converte em inteiro e atribui a variável.

Note se a busca fosse SOMENTE pelo filme MAIS ANTIGO, o filme vencedor seria o Filme 01. Porém, tem que ser o mais antigo "dentro" da categoria que o usuário forneceu. No caso, 18.

Nesse caso:
supergelson:
//No caso aqui, maisAntigoAtualmente =0, se no cadastro tiver ano=1980  
//anoDoFilme não vai ser menor do maisAntigoAtualmente então a condição seria falsa não é?  
//E nãoguardaria os valores  
            if(anoDoFilme < maisAntigoAtualmente) {

Você tem razão. Não deveria ser inicializado com 0 a variável "maisAntigoAtualmente" e sim, com um numero que, de cara, com certeza fosse maior que qualquer ano da lista.
Como por exemplo 2050 ( já que é impossível que qualquer filme tenha essa data de lançamento ( pelo menos até 2050 :twisted: ) ).

S

[size=7][color=white]. [/color] [/size]

S

Entendi perfeitamente, coloquei

int maisAntigoAtualmente = Integer.MAX_VALUE;//Seria o valor máximo não é?

Agora uma última dúvida(eu acho rsrs),

Achei que seria a parte mais fácil , mais até nisso matriz está me dando problema.

Seria um algoritimo simpless

if (dentro da matriz não tiver nenhum registro) {  
  
JOptionPane.showMessageDialog(null,  
                        " Nenhum registro encontrado!");  
  
} else {  
  
<instruções>  
  
}

Mas quando fui tentar…

private static void listarDesenhoFaixaEtaria() {  
  
        String classificacaoAPesquisar = JOptionPane.showInputDialog("Qual a faixa etária deseja exibir ?");  
        int i = 0;  
  
        int Achar = Integer.parseInt(desenhosAnimados[i][CLASSIFICACAO]);  
  
        for (i = 0; i < desenhosAnimados.length; i++) {  
  
            if (Achar < 0) {  
  
                JOptionPane.showMessageDialog(null,  
                        " Nenhum registro encontrado!");  
  
            } else {  
                if (desenhosAnimados[i][CLASSIFICACAO].equals(classificacaoAPesquisar)) {  
  
  
  
                    JOptionPane.showMessageDialog(null,  
                            " Código: " + desenhosAnimados[i][CODIGO] + "\n"  
                            + " Nome: " + desenhosAnimados[i][NOME] + "\n"  
                            + " Classificação: " + desenhosAnimados[i][CLASSIFICACAO] + " anos\n"  
                            + " Ano de lançamento: " + desenhosAnimados[i][ANO] + "\n"  
                            + " Duração do desenho: " + desenhosAnimados[i][TEMPO] + "\n"  
                            + " Quantidade em estoque: " + desenhosAnimados[i][QTD_ESTOQUE] + " unidade (s)\n"  
                            + " Valor do DVD: R$ " + desenhosAnimados[i][VALOR]);  
  
                }  
  
            }

Mostra o seguinte erro:

run:  
Exception in thread "main" java.lang.NullPointerException  
    at Principal.listarDesenhoFaixaEtaria(Principal.java:127)  
    at Principal.main(Principal.java:48)  
Java Result: 1  
CONSTRUÍDO COM SUCESSO (tempo total: 43 segundos)
Criado 10 de novembro de 2012
Ultima resposta 15 de nov. de 2012
Respostas 25
Participantes 2