Problemas na escrita de um arquivo txt!

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:

[code]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 ();
}

}[/code]

obrigado pessoal,
abraços

Olá!

Cara, acontece que na linha double[][] data = new double[gridW * gridL][5]; vc está declarando um array do tipo double. Por isso vc não consegue atribuir um objeto do tipo String este array.

Tente utilizar alguma classe do tipo Collection ou Map para armezar, mas para isso vc não poderá usar double (primitivo) e sim a classe Double.

Abraços!

[quote=andre.santos]Olá!

Cara, acontece que na linha double[][] data = new double[gridW * gridL][5]; vc está declarando um array do tipo double. Por isso vc não consegue atribuir um objeto do tipo String este array.

Tente utilizar alguma classe do tipo Collection ou Map para armezar, mas para isso vc não poderá usar double (primitivo) e sim a classe Double.

Abraços![/quote]

excelente dica!
valeu andre!

abraços pessoal!

Para converter uma String em double, use Double.parseDouble.

String s = "'1.23";
double d = Double.parseDouble (s);

[quote=thingol]Para converter uma String em double, use Double.parseDouble.

String s = "'1.23"; double d = Double.parseDouble (s); [/quote]

valeu pela dica thingol, mas eu tentei tanto o parse.Double quanto o Double.ValueOf e ambos nao deram certo nesse script:

1. String varyH = "teste"; 2. data[row][4] = varyH;

encontrei uma soluçao que na verdade eh gambiarra, criei um outro array de String so para adicionar a palavra que desejava…

abraços

Ah, agora entendi o que você quer. Você quer fazer uma planilha eletrônica, onde os campos podem ser números (e nesse caso cabe o “double”) ou outras coisas (no seu caso, “teste” obviamente não é um número).
Crie um array de strings, ou então de Object (e você é que tem de rebolar para passar o tal Object para double, string ou outra coisa).

[quote=thingol]Ah, agora entendi o que você quer. Você quer fazer uma planilha eletrônica, onde os campos podem ser números (e nesse caso cabe o “double”) ou outras coisas (no seu caso, “teste” obviamente não é um número).
Crie um array de strings, ou então de Object (e você é que tem de rebolar para passar o tal Object para double, string ou outra coisa).
[/quote]

exato thingol! optei pela primeira opçao, nao sou mto bom ainda em rebolar no Java!
abraços!