Ir ao conteúdo
  • Cadastre-se

Exercicio java


Posts recomendados

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

Link para o comentário
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 ...

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...