Vector para float

5 respostas
leonardorcortes

Olá!

Tenho o seguinte problema:

Um método que recebe como parâmetro um Vector, e preciso utilizar os elementos desse vetor num calculo.

public float MediaAritmetica (Vector entrada, boolean escreve) { float temp = null; for (int i = 0; i < ValorDoPrimeiroElementoDoVetor; i++) { temp + entrada.elementAt(i); } float resultado = temp; }

Tentativa: utilizar o valor do primeiro elemento do vetor num laço de repetição, somando os elementos seguintes desse vetor, de acordo com o número de vezes identificado no laço criado.

Exemplo: se a primeira posição do vetor contem “5”, então ele pegara os próximos 5 elementos do vetor e somará dentro do laço criado.

Agradeço desde ja!

5 Respostas

p5f8

era isso?

public float MediaAritmetica (Vector entrada, boolean escreve) {
     float temp = 0.0f;
     float ValorDoPrimeiroElementoDoVetor = (float) entrada.get(0);
     
     for (int i = 1; i < ValorDoPrimeiroElementoDoVetor; i++) {
         temp = temp + ((float)entrada.get(i));
     }
     retun temp;
}
leonardorcortes
public float MediaAritmetica (Vector entrada, boolean escreve) {
          float temp = 0.0f;
          int ValorDoPrimeiroElementoDoVetor = (int)entrada.get(0);

          for (int i = 1; i < ValorDoPrimeiroElementoDoVetor; i++) {
              temp = temp + ((float)entrada.get(i));
          }
          return temp;
     }

1o. Erro (CAST): (int)entrada.get(0) não pode converter de Object para int
2o. Erro (CAST): (float)entrada.get(i) não pode converter de Object para float

Aguardo retorno!

legionarioba
public float MediaAritmetica (Vector entrada, boolean escreve) {
        float temp = 0.0f;
        int ValorDoPrimeiroElementoDoVetor = ((Integer)entrada.get(0)).intValue();

        for (int i = 1; i < ValorDoPrimeiroElementoDoVetor; i++) {
            temp = temp + ((Float)entrada.get(i)).floatValue();
        }
        return temp;
   }

Você não pode converter Object em um tipo primitivo :slight_smile: Você pode usar a classe Wrapper Float pra poder usar o Cast de Object, e então pegar seu valor primitivo pelo método floatValue(), ai só alegria :slight_smile: (O mesmo raciocínio pra int/Integer, double/Double…)

leonardorcortes
ArithmeticProcess.java
/**
 * @author Leonardo Reis Cortes
 * @version 1.0.0
 * @date 29/03/2005
 */

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Vector;

public class ArithmeticProcess {

    public Vector ReadStream(String filename, boolean print) throws IOException {
        /**
         * ReadStream(String filename, boolean print)
         *
         * método utilizado para capturar dados de um arquivo texto.
         * true  -> armazena e escreve na janela console o valor capturado.
         * false -> apenas armazena o valor capturado para uso posterior.
         */
        FileReader input = new FileReader(new File(filename));
        BufferedReader reader = new BufferedReader(input);
        String line = null;
        Vector content = new Vector();

        for (int i = 0; reader.ready(); i++) {
            line = reader.readLine().toString();
            content.add(line);
            if (print) {
                System.out.println(new StringBuffer().append("#").append(i).append(" -> ").append(line).toString());
            }
        }
        reader.close();
        input.close();
        return content;
    }

    public float ArithmeticMean(Vector content, boolean print) {
        /**
         * ArithmeticMean (Vector content, boolean print)
         *
         * método utilizado para calcular a média aritmética de valores armazenados num vetor.
         *
         * 1a. posição do vetor informa o numero de elementos a serem utilizados no calculo.
         * true  -> armazena e escreve na janela console o valor capturado.
         * false -> apenas armazena o valor capturado para uso posterior.
         */
        float temp = 0.0f;
        float result = 0.0f;
        int limit = ((Integer) content.get(0)).intValue() + 1;

        for (int i = 1; i < limit; i++) {
            temp += ((Float) content.get(i)).floatValue();
            if (print) {
                System.out.println(new StringBuffer().append("# ").append(i).append(" -> ").append(temp).toString());
            }
        }
        result = temp/limit;
        return result;
    }

    public static void main (String[] args) throws IOException {
        ArithmeticProcess MeanTest = new ArithmeticProcess();
        MeanTest.ArithmeticMean(MeanTest.ReadStream("Input.txt",true),true);
    }
}

/**
 * Copyright (c) 2005 Leonardo Reis Cortes. All rights reserved.
 */
Input.txt
2
7
8

Bom, essa ai é minha classe! Parece tudo ok, até a parte onde tenho que converter os Objects do vector para floats e integers.

Se alguem puder ajudar, agradeço desde já!

David

leonardo, o problema está nesta linha aqui:

int limit = ((Integer) content.get(0)).intValue() + 1;

Você colocou Floats no seu vetor e está tentando fazer o cast para Integer. Uma solução para isso é você não fazer este cast, e sim utilizar o método intValue() da classe Float.

int limit = ((Float) content.get(0)).intValue() + 1;

Agora observe que o imprimir só está servindo para imprimir os números do vetor. A média não está sendo impressa.

Abraços.

Criado 29 de março de 2005
Ultima resposta 29 de mar. de 2005
Respostas 5
Participantes 4