Array, cadastro

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 ) …

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 ;  

Ou seja

int maisAntigoAtualmente = 0; então

anoDoFilme nunca iria ser < maisAntigoAtualmente

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

[code]

//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…

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:

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

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

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)