daviddubois
Messages postés92Date d'inscriptionvendredi 19 mars 2004StatutMembreDernière intervention 6 janvier 2012
-
20 juil. 2007 à 20:13
cs_GodConan
Messages postés2113Date d'inscriptionsamedi 8 novembre 2003StatutContributeurDernière intervention 6 octobre 2012
-
21 juil. 2007 à 12:22
Bonjour tout le monde,
Je suis un peu déçu car je pensais avoir acquis tous les principes des File (FileReader, BufferedReader...) mais je m'aperçois que ce n'est toujours pas le cas.
L'exercice consiste à écrire dans un fichier txt des nombres aléatoire.
Ensuite, faire l'addition du premier et du dernier.
Question :
Sais-t'on lire dans un fichier txt et récupérer le premier nombre et le dernier et les additionner dans une variable ?
J'ai essayé, ça ne fonctionne pas.
Voici mon code, merci d'avance pour votre aide.
import java.io.*;
public class SommePremierDernier
{
public static void main (String [] args) throws IOException
{
File f = new File("c:\\somme.txt");
f.delete();
FileWriter fw = new FileWriter(f);
BufferedWriter bw = new BufferedWriter(fw);
int limite = (int)(Math.random()*20+1);
int nombres;
int sommePremierEtDernier=0;
public static int calcul() throws IOException
{
File f = new File("c:\\somme.txt");
FileReader fr = new FileReader(f);
BufferedReader br = new BufferedReader(fr);
String ligne ="";
int i=0;
int somme=0;
int nombre;
while ((ligne=br.readLine())!=null)
{
nombre = Integer.parseInt(ligne);
System.out.println(nombre);
i++;
System.out.println("i: "+i);
if (i==1)
{
somme+=nombre;
}
}
cs_GodConan
Messages postés2113Date d'inscriptionsamedi 8 novembre 2003StatutContributeurDernière intervention 6 octobre 201212 21 juil. 2007 à 10:06
ton petit prog ca resemble un peu à : pourquoi faire simple qd on peut faire compliqué!!? ;o)
bon je voi 2 ou 3 petit soucis deja :
-la methode calcul il serait mieu de l apeller apres avoir fermer les flux d ecriture
-pourquoi tu ne feerme pas les flux de lecture?!!
-tu ecris un int et ds ta methode calcule tu lis un String ;o) dc deja ca risk pas de marcher ;o)
si tu veux ecrire un String : bw.write(""+nombres);
ensuite ta methode calcul c est une vrai cata ;o) je te laisse un peu reflechir ;o) pour la simplifier mechement ;o) et detoute facon tu ne mets que un seul nombre dedans... ;o)
daviddubois
Messages postés92Date d'inscriptionvendredi 19 mars 2004StatutMembreDernière intervention 6 janvier 2012 21 juil. 2007 à 10:19
Bonjour GodConan,
Merci pour ton dévouement et ta patience.
J'avais trouvé le problème d'hier soir 5 minutes avant de recevoir la confirmation de réponse à mon message sur le forum.
JE DOIS FERMER LE FLUX AVANT DE LE LIRE, autrement, il n'y a rien d'écrit, moi je le fermais après, je voyas du texte dans le txt mais je ne pouvais pas le lire.
Voilà donc une bonne chose de résolue.
Je rencontre un autre problème maintenant.
Je voudrais additionner le premier chiffre et le dernier.
Je partage le travail en deux, et je commence d'abord par additionner le premier, pour cela, j'ai créé une variable entière nommée fois que je met à 0.
Ensuite, dans mon while((ligne=bw.readLine())!=null), j'incrémente fois de 1 (fois++)
Si fois vaut 1, je transforme le String en entier avec Integer.parseInt(ligne) que j'affecte à une variable nommée par exemple enEntier.
et j'ajoute à la variable somme, la valeur de enEntier.
Mais ça marche po :)
Voici mon code que j'ai complétement retravaillé ce matin, j'ai laissé tomber la méthode pour faire tout dans le main, merci pour tout GodConan :
import java.io.*;
public class ExFile
{
public static void main (String [] args) throws IOException
{
File f = new File("c:\\somme.txt");
FileReader fr = new FileReader(f);
BufferedReader br = new BufferedReader(fr);
BufferedWriter bw = new BufferedWriter(new FileWriter(f));
f.delete();
int nbFois = (int)(Math.random()*20+1);
int nombres = 0;
at java.lang.NumberFormatException.forInputString(NumberFormatException.
java:48)
at java.lang.Integer.parseInt(Integer.java:489)
at java.lang.Integer.parseInt(Integer.java:518)
at ExFile.main(ExFile.java:39)
Press any key to continue...
cs_GodConan
Messages postés2113Date d'inscriptionsamedi 8 novembre 2003StatutContributeurDernière intervention 6 octobre 201212 21 juil. 2007 à 10:42
je t ai deja enumeré toute les erreur presente ds ton exemple et tu ne les as pas toute corrigé....
de plus je t ai di de reflechir à ta lecture en fait tu n a pas resolu le probleme de raisonnement ;o) tu as juste fait une obtimisation...
deja pour additionner un premier et un dernier nombre il faut etre sur que tu aura 2 element ds ton fichier *19+2
ensuite tu peux lire le premier element sans sousi ;o) et il te faut trouver le dernier ce que tu ne fait pas.... ;o)
je te fai un exemple mais pendant ce temps cherche un peu ;o)
GodConan ;o)
Vous n’avez pas trouvé la réponse que vous recherchez ?
daviddubois
Messages postés92Date d'inscriptionvendredi 19 mars 2004StatutMembreDernière intervention 6 janvier 2012 21 juil. 2007 à 10:45
Salut Conan,
Je viens de trouver le problème du parseInt(), il essayait de convertir des symboles en String, chose impossible.
J'ai donc transformé l'entier en String avec Integer.toString(argument) et j'ai ensuite écrit ce String.
C'est très pertinent ce que tu dis sur le fait qu'il faut au moins deux chiffres pour calculer le premier et le dernier, je fais le nécessaire dès maintenant.
cs_GodConan
Messages postés2113Date d'inscriptionsamedi 8 novembre 2003StatutContributeurDernière intervention 6 octobre 201212 21 juil. 2007 à 10:52
je te donne une solution correspondant à ton exersise ;o)
public
static int calcul() throws IOException
{
File f = new
File("c:\\somme.txt");
FileReader fr = new FileReader(f);
BufferedReader br = new
BufferedReader(fr);
String ligne =br.readLine();
int
somme= Integer. parseInt (ligne);
String saveLine = "";
while
(ligne! =null )
{
saveLine = ligne;
// astuce pour éviter de parser ds la boucle
ligne=br.readLine();
}
somme+= Integer.parseInt(saveLine);
return somme;
}
dificile de faire plus simple!!! ;o) et pas une seule alternative ;o)
cs_GodConan
Messages postés2113Date d'inscriptionsamedi 8 novembre 2003StatutContributeurDernière intervention 6 octobre 201212 21 juil. 2007 à 11:03
il est prudent de faire les operation de lecture ds des block catch ;o)
note qu aucun test n est fait sur la validité des donne on supose donc que le fichier est correctement généré... ;o) ca aussi il faut s en méfier....
cs_GodConan
Messages postés2113Date d'inscriptionsamedi 8 novembre 2003StatutContributeurDernière intervention 6 octobre 201212 21 juil. 2007 à 12:22
int nombre = 0;
while ((ligne =br.readLine())!= null )
{
nombre =Integer. parseInt (saveLine);
}
somme+ = nombre;
return somme;
pour info ;o) ca c est la soluce normale ;o) sans obtimiser l interrieur de la boucle
direction dans laquelle tu etais partie je pense ;o)
biensur tant que tu le peu il faut sortir les operation longue des boucle et un parseint c est bcp plus long qu un passage de reference ,o)