Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Array utilizando javax.swing.JOptionPane

Visando aprimorar os conhecimentos de array, encontrei um exercício complementar na internet e me deparei com essa seguinte situação: desenvolver um programa que informasse quando os número de entrada era sequencial ou não. Consegui chegar ao seguinte código:

package Estudos;

public class logicaSequencial {
    public static void main(String[] args) {
        int sequencial[] = {1, 2, 5, 8, 9, 10, 12};
        System.out.println("Me mostre os números: ");
        for (int i=0; i < sequencial.length; i++){
            System.out.print(sequencial[i] + "\n" );
            if (i != 0){
                if (sequencial [i -1] + 1 == sequencial[i]){
                    System.out.println(" sequencial");
                }else{
                    System.out.println(" não sequencial");
                }

            }
        }
    }
}

Funcionou, porém, quando pediram para implentar o código orientado ao objeto utilizando a importação da classe javax.swing.JOptionPane, não consegui fazer, meu código saiu assim:

MAIN

package br.com.Fabiano.sequencial.teste;

import javax.swing.JOptionPane;

import br.com.Fabiano.sequencial.classe.sequencial;

public class testeSequencial {

    public static void main(String[] args) {
        sequencial numero = new sequencial();

        for(int i=0; i<10; i++){
        numero.setNumero(Integer.parseInt(JOptionPane.showInputDialog("Digite número inteiro")));

        }

        for (int i=0; i < numero.getNumero().length; i++){
            System.out.print(numero.getNumero()[i] + "\n" );
            if (i != 0){
                if (numero.getNumero() [i -1] + 1 == numero.getNumero()[i]){
                    JOptionPane.showMessageDialog(null," sequencial");
                }else{
                    JOptionPane.showMessageDialog(null, " não sequencial");
                }
            }
        }
    }
}

A CLASSE:

package br.com.Fabiano.sequencial.classe;

public class sequencial {
    private int[] numero;

    public int[] getNumero() {
        return numero;
    }

    public void setNumero(int[] numero) {
        this.numero = numero;
    }

}

O que estou fazendo de errado que não consigo utilizar o numero.setNumero(), ele pede pra converter sem ser sequencial dentro da classe? Qual seria um código ideal utilizando array e .swing.JOptionPane?

3 respostas

Só pra esclarecer o problema seria para quando fosse digitado uma seqüência de números, o programa retornasse o resultado informando se os números estavam na ordem sequencial ou não.

Olá Fabiano, minha sugestão é acrescentar um método na classe Sequencial chamado verificarSequencialiadade (ou algo que o valha) que retornaria um boolean. Então a classe ficaria desta forma:

package br.com.Fabiano.sequencial.classe;

public class Sequencial {
    private int[] numeros;

    public int[] getNumeros() {
        return numeros;
    }

    public void setNumeros(int[] numeros) {
        this.numeros = numeros;
    }

    public boolean verificarSequencialidade() {
        for (int i=0; i < numeros.length; i++) {
            if (i != 0){
                if (numeros[i -1] + 1 != numeros[i]){
                    return false
                }
            }
        }

        return true;
    }
}

Note que bastando achar uma quebra na sequencialidade, o método já retorna false, não necessitando mais continuar o processamento. Se ele percorrer todo o for então significa que os números estão na sequencia correta, e o metodo retorna true.

Outra questão é que a classe é agnóstica com relação a exibição de informações intermediárias. O ideal é que não haja relação nenhuma da classe Sequencial com qualquer outra como JOptionalPanel por exemplo, pois neste caso vc estaria acoplando uma classe "negocial" com uma classe para exibir informações "view". Imagina que amanhã vc quer utilizar esta solução numa aplicação Android!? Android não tem swing, então vc teria que alterar a classe Sequencial. O ideal para está situação é utilizar um Padrão de Projeto chamado Observer para que a classe Sequencial dispare eventos que poderão ser monitorados por outros objetos, de uma forma agnóstica. Mas isto já é um assunto mais avançado, fica a dica para futuros estudos.

Espero que tenha ajudado.

Att.

solução!

Olá Fabiano, tudo bem?

na linha em que você seta o numero temos uma incompatibilidade... o retorno de "Integer.parseInt(JOptionPane.showInputDialog("Digite número inteiro"))" resulta em um int; você está tentando atribuir um int a um Array de Int.

Você poderia resolver sua aplicação, inicializando o array numero, "numero.setNumero( new int[10] );" e atribuir cada valor a uma posição ( de 0 a 9 ) no array numero, dentro do seu laço for... Veja:

sequencial numero = new sequencial();
numero.setNumero( new int[10] );
for(int i=0; i<10; i++){
    seq.getNumero()[i] = (Integer.parseInt(JOptionPane.showInputDialog("Digite número inteiro")));
}    

Espero ter te ajudado! Senão me avisa que tentamos chegar a uma solução juntos.

Abraço!