Problema nos formatos - escrita de arquivo em txt

3 respostas
J

ola pessoal,

bom minha duvida é a seguinte: eu estou lendo um arquivo txt, fazendo alguns calculos com os numeros dentro desse arquivo txt e logo em seguida estou escrevendo em outro arquivo txt. Beleza entao, ate agora consegui.
Para criar o arquivo txt que vou produzir (output), eu fiz da seguinte maneira:

double[][] data = new double[gridW * gridL][5];

eu criei um double, porque esse arquivo envolver alguns calculos com numeros grandes. Agora vem o problema: eu preciso justamente de escrever uma palavra quando acontece um caso especial, no entanto o compilador esta acusando erro " Type mismatch: cannot convert from String to double"... Dai eu estava tentando descobrir o problema: eu preciso de escrever um String dentro desse arquivo double, é possivel??? estou fazendo isso:

String varyH = "teste"; 
data[row][4] = varyH;

o que se passa amigos? abaixo esta o codigo na sua totalidade:

import java.io.*;
import java.util.*;
import java.text.DecimalFormat;

//5 attributes: x, y, raw value, z-scores, cluster_id
class Formatter 
{
	public DecimalFormat threeDigits = new DecimalFormat("0.00");
	int total = 0;

	public static void main(String[] args) 
	{
		Formatter fm = new Formatter ();
		int gridW = 700; // grid size = 83 x 65
		int gridL = 1253;
		fm.init ("C:\Users\Play\workspace\ZSc\src\aveveg.txt", gridW, gridL);

	
	}

	public void init (String inFilename, int gridW, int gridL)
	{
		double[][] data = new double[gridW * gridL][5]; 

		readInputs (inFilename, data);

		int row = 0;
		float countP = 0;
		float countN = 0;
		double mean = mean (data);
		double stdev = stdev (data, mean);
		String varyH = "teste"; 
		
		
		for (int gl = 0; gl < gridL; gl++)
		{
			for (int gw = 0; gw < gridW; gw++)
			{

				data[row][0] = gw; //filling out the first attribute of double data
				data[row][1] = gl; //filling out the second attribute of double data

				if(data[row][2] != -9999){
					data[row][3] = (data[row][2] - mean)/stdev;
				}
				else data[row][3] = -9999;

// PROBLEMA ESTA AQUI!
				if(data[row][3] == -9999)
					data[row][4] = varyH;





				// figuring out the statistic
				if (data[row][3] != -9999){

					if(data[row][3] >= 1)
						countP++;

					if(data[row][3] <= -1)
						countN++;
				}

				row++;
			}


		}

		String outFilename = "C:\Users\Play\workspace\ZSc\src\aveveg1.txt";
		writeOutputs (outFilename, data);


	}




	public double mean (double[][] data)
	{
		double mResult = 0.0;
		
		double sum = 0.0;
		for (int i = 0; i < data.length; i++)
		{
			if(data[i][2] != -9999){
				sum += data[i][2];
				total = total + 1;
			}
		}


		mResult = sum/total;
		System.out.println("MEAN:" + threeDigits.format(mResult));

		return mResult;

	}
	public double stdev (double[][] data, double mean)
	{
		double sResult = 0.00;
		double tmp = 0.0, sum = 0.0;
		for (int i = 0; i < data.length; i++)
		{
			if(data[i][2] != -9999){
				tmp = data[i][2] - mean;
				sum += (tmp * tmp);
			}
		}

		sResult = Math.sqrt(sum/(data.length));
		System.out.println("STD_DEV:" + threeDigits.format(sResult));	

		return Math.sqrt (sum/(data.length)); 

	}

	public void readInputs (String inFilename, double[][] data)
	/* indica que cada token é uma linha do double data e cada dado do arquivo txt
	 sera colocado na linha 3 do double data*/
	{
		FileReaderManager reader = new FileReaderManager (inFilename);
		String line = null;		
		int row = 0;



		while ((line = reader.read ()) != null)
		{
			StringTokenizer st = new StringTokenizer (line, " ");
			while (st.hasMoreTokens ())
			{
				data[row++][2] = Double.parseDouble (st.nextToken ());
			}
		}

		reader.close ();
	}

	public void writeOutputs (String outFilename, double[][] data)
	{
		FileWriterManager writer = new FileWriterManager (outFilename);

		StringBuffer outData = new StringBuffer ();
		outData.append ("x,y,raw_value,Z-score_value,analyse\n");

		for (int i=0; i<data.length; i++)
		{
			outData.append (data[i][0] + ",");
			outData.append (data[i][1] + ",");
			outData.append (data[i][2] + ",");
			outData.append (data[i][3] + ",");
			outData.append (data[i][4] + "\n");
		}

		writer.write (outData.toString ());
		writer.close ();
	}
}

obrigado pessoal,
abraços

3 Respostas

S

Altera ali onde tá o erro.

if(data[row][3] == -9999)   
                    data[row][4] = Double.valueOf(varyH);
J

SdRuboW:
Altera ali onde tá o erro.

if(data[row][3] == -9999) data[row][4] = Double.valueOf(varyH);

valeu SdRuboW pela dica! mas o erro persiste, tentei o parse Double tambem, mas deu erro. Quando usei o Double.valueOf apareceu isso:

Exception in thread main java.lang.NumberFormatException: For input string: testeat sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)

at java.lang.Double.valueOf(Unknown Source)

at Formatter.init(Formatter.java:50)

eu vou tentar fazer uma gambiarra aqui, porque inserir um String dentro de um array double nao ta funfando de jeito algum!
abraços!

S

java_up então é o seguinte, o que tem nesse teu arquivo??

pois essa excpetion é por você ter tentado transformar a String “teste” em um tipo Double, isso nunca vai dar certo mesmo.

uma vez que seu array está definido assim

double[][] data = new double[gridW * gridL][5];

não tem como, o único jeito é esse ae

Criado 26 de junho de 2008
Ultima resposta 1 de jul. de 2008
Respostas 3
Participantes 2