Ir ao conteúdo
  • Cadastre-se
marciorob

Exercicio java

Recommended Posts

Estou com uma duvida, eu tenho um exercício conforme imagem em anexo.

Esse é a minha MAIN
 

public class Main {       
   //inicio da main
    public static void main(String[] args) {
        //declaração do método scanner
        Scanner Leia=new Scanner(System.in);
        //definindo o tamanho do vetor
        System.out.print("Tamanho do vetor:");
        int iTam=Leia.nextInt();
        //objeto vetor especial
        VetorEspecial obj1=new VetorEspecial(iTam);
        //vetor já definido seu tamanho
        double [] fVet=new double[iTam];
        //entrando co dados no vetor da classe vetor especial
        for(int i=0;i<fVet.length;i++){
            System.out.print("entre com a Nota ["+(i+1)+"] : ");
            fVet=Leia.nextDouble();
            obj1.setElemento(fVet);
            obj1.setElementoIndice(fVet,i);
        }
        //exibição do resultado processado pela classe vetor especial
        System.out.print(obj1.getInfo());
    } 
}//fim main

Essa é a minha classe VetorEspecial
//classe para armazenar as notas de uma classe de alunos
public class VetorEspecial {
    //introdução das variáveis
    private double[] m_fVet = new double[50];
    private int m_iIndiceVetor;
    private int m_iTam;
    Scanner Leia = new Scanner(System.in);    //Construtor da classe
    public VetorEspecial(int iTamanho) {
        //inicializando cada posição do vetor
        for (int i = 0; i < iTamanho; i++) {
            m_fVet = 0.0;
        }
        m_iIndiceVetor = 0;
        m_iTam = iTamanho;
    }    //Geters & Seters
    //adiciona dados no proximo indice do vetor
    public void setElemento(double fDado) {
        m_fVet[m_iIndiceVetor++] = fDado;
    }    //entrada de dados no vetor posição n
    public void setElementoIndice(double fDado, int iInd) {
        //notas válidas somente de (0 à 10)
        while (m_fVet[iInd] > 10.0 || m_fVet[iInd] < 0.0) {
            System.out.println("Notas fora do intervalo de [0 a 10] são inválidas!!"
                    + "\nEntre novamente com anota: ");
            m_fVet[iInd] = Leia.nextDouble();        }
        if (fDado > 0 && fDado < 11) {
            m_fVet[iInd] = fDado;
        }
    }    //metodo para retorna o vetor original digitada pelo usuário
    public double[] getVetor() {
        double[] fVet2 = new double[m_iTam];
        for (int i = 0; i < m_iTam; i++) {
            fVet2 = m_fVet;
        }
        return fVet2;
    }
    //método para retornar o tamanho do vetor
    public int getTamanho() {
        return m_iTam;
    }
    //método para retornar a media do vetor
    public double getMediaVetor() {
        double fSoma = 0.0;
        for (int i = 0; i < m_iTam; i++) {
            fSoma += m_fVet;
        }
        return fSoma / m_iTam;
    }
    //método para retornar o vetor de forma crescente
    public double[] getCrescente() {
        //função selectSort para a ordenação
        //variaveis
        double fMenor;
        int iIndiceMenor;
        double[] fVet2 = new double[m_iTam];
        for (int i = 0; i < m_iTam; i++) {
            fVet2 = m_fVet;
        }
        for (int i = 0; i < m_iTam - 1; i++) {
            // antes de comparar, considera-se menor o valor atual do loop
            fMenor = fVet2;
            iIndiceMenor = i;
            // compara com os outros valores do vetor
            for (int j = i + 1; j < m_iTam; j++) {
                if (fVet2[j] < fMenor) {
                    fMenor = fVet2[j];
                    iIndiceMenor = j;
                }
            }
            // troca os valores menor e maior
            fVet2[iIndiceMenor] = fVet2;
            fVet2 = fMenor;
        }
        //retornando o vetor já ordenado
        return fVet2;
    }
    //método para retornar o vetor de forma decrescente
    public double[] getDecrescente() {
        //função selectSort para a ordenação
        //variáveis
        double fMenor;
        int iIndiceMenor;
        double[] fVet2 = new double[m_iTam];
        for (int i = 0; i < m_iTam; i++) {
            fVet2 = m_fVet;
        }
        for (int i = 0; i < m_iTam - 1; i++) {
            // antes de comparar, considera-se menor o valor atual do loop
            fMenor = fVet2;
            iIndiceMenor = i;
            // compara com os outros valores do vetor
            for (int j = i + 1; j < m_iTam; j++) {
                if (fVet2[j] > fMenor) {
                    fMenor = fVet2[j];
                    iIndiceMenor = j;
                }
            }
            // troca os valores menor e maior
            fVet2[iIndiceMenor] = fVet2;
            fVet2 = fMenor;
        }
        return fVet2;
    }
    //método para retornar o maior valor encontrado no vetor
    public double getMaiorValor() {
        m_fVet = getDecrescente();
        return m_fVet[0];
    }
    //método para retornar o menor valor encontrado no vetor 
    public double getMenorValor() {
        m_fVet = getDecrescente();
        return m_fVet[m_iTam - 1];
    }
    //esse método retorna informações para ser exibido no principal
    public String getInfo() {
        String str = "\nVetor Original: " + Arrays.toString(getVetor()) + "\nTamanho do Vetor: " + getTamanho()
                + "\nMedia do Vetor: " + getMediaVetor() + "\nVetor Crecente: " + Arrays.toString(getCrescente())
                + "\nVetor Decrescente: " + Arrays.toString(getDecrescente()) + "\nMaior Valor: " + getMaiorValor()
                + "\nMenor Valor: " + getMenorValor();
        return str;
    }
}//fim da classe vetorespecial


 

Só que o meu Setelemento e Setelementoindice estão funcionando da mesma forma, alguém sabe o porque?

Sem título.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que entendi do enunciado setElemento(double fDado) apenas adiciona um valor ao final da lista, enquanto setElementoIndice(double fDado, int iInd) altera o valor de uma determinada posição da lista ... com isso temos

 

    public void setElemento(double fDado) {
        m_fVet[m_iIndiceVetor++] = fDado;
    }
    public void setElementoIndice(double fDado, int iInd) {
        //Valida se o indice é positivo e menor que o tamanho da array
        //Normalmente se o indice não for válido, nós jogamos uma Exception, mas isso fica como sua opção
        if (iInd >= 0 && iInd < m_iTam){
            m_fVet[iInd] = fDado;
        }
    }

Não há segredo e nem motivo de fazer a entrada de dados dentro da classe modelo (VetorEspacial) ... aliás, evite ao máximo ter ações desse tipo. A classe numa classe superior (como a Main) você lê os dados e utiliza os setters para colocar os dados na classe ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×