2017-10-14 14 views
1

J'essaie d'imprimer la plage de nombres dans un fichier texte en utilisant Scala.Écrire une plage de nombres doubles dans un fichier

Voici mon code:

package test 

import java.io._ 

class Normal { 
    def function(N:Double,File:String) { 
     val rangetest = ((-N/2) to (N/2)) 
     val pw = new PrintWriter(new File(File)) 
     pw.write(rangetest) 
     pw.close 
    } 
} 

object normal_distribution extends App { 
    val N = 50000.toDouble 
    val file = "/home/Desktop/output_normal.txt" 
    val normal_obj = new Normal 
    normal_obj.function(N, file) 
} 

mais je reçois une erreur avec la ligne

pw.write(rangetest) 

Message d'erreur: valeur méthode surchargée écriture avec des alternatives: (x 1 $: String) Unité <et> (x $ 1: Array [Char]) Unité

<et> (x 1 $: Int) unité ne peut pas être appliquée à

(Range.Partial [Double, scala.collection.immutable.NumericRange [Double]])

Je ne suis pas en mesure d'imprimer la gamme de valeurs.

+0

Vous devez d'abord convertir le rangetest val, qui est un type de Range, en une chaîne. Si je ne me trompe pas, vous pouvez utiliser 'rangetest.mkString (", ")' – sercanturkmen

+1

Copie possible de [Comment écrire un fichier dans Scala?] (Https://stackoverflow.com/questions/4604237/how-to -write-à-un-fichier-en-scala) – sercanturkmen

Répondre

0

Vous devez vous convertir rangetest à une première liste en spécifiant pas parce que vous êtes dans le domaine RichDouble etc

Voici un code:

fonction def (N: Double, fichier: String) {

val rangetest = (-N/2) to (N/2) 

val step = 0.01 

val sep = " " 

val rangeByStep = rangetest.by(step) 

val list = rangeByStep.toList 

val str : String = list.mkString(sep) 

val pw = new PrintWriter(new File(File)) 

pw.write(str) 

pw.close 

}

0

L'une ligne concise:

new PrintWriter("range.txt") { write(0.0 to 1.0 by 0.25 mkString(" ")); close }