Lire Des Données Depuis Un Fichier Texte Et De La Somme Des Numéros De
Je veux lire des données à partir d'un fichier texte qui est plein d'entiers et d'avoir le programme affiche les entiers à l'écran tout en faisant la somme. Cela ne devrait pas être dur, mais je ne peux pas la comprendre!!!
Ici est simplifiée à l'extrême fichier texte:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Et voici mon code qui est censé fonctionner:
import java.util.*;
import java.io.File;
import java.io.IOException;
public class ReadFile
{
public static void main(String[] args)
throws IOException
{
Scanner textfile = new Scanner(new File("Some_Numbers.txt"));
filereader(textfile);
}
static void filereader(Scanner textfile)
{
int i = 0;
int sum = 0;
while(i <= 19)
{
System.out.println(textfile.nextInt());
sum = sum + textfile.nextInt();
i++;
}
}
}
Enfin, ici, est le résultat que j'obtiens:
1
3
5
7
9
11
13
15
17
19
Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:838)
at java.util.Scanner.next(Scanner.java:1461)
at java.util.Scanner.nextInt(Scanner.java:2091)
at java.util.Scanner.nextInt(Scanner.java:2050)
at ReadFile.filereader(ReadFile.java:23)
at ReadFile.main(ReadFile.java:12)
- Vous devez utiliser
nextLong()
au lieu denextInt()
. Voir ma réponse.
Vous devez vous connecter pour publier un commentaire.
Vous appelez fichier texte.nextInt() deux fois dans la boucle. Essayez:
integer::i, sum, variablename i = 0 sum = 0 OPEN(UNIT=99, file=('Some_Numbers.txt'), form='formatted) DO i = 1,19 READ(99, '(I2)') variablename PRINT*, variablename sum = sum + variablename ENDDO CLOSE(99) PRINT*, sum
Beaucoup plus intuitif à mon avis.Vous n'avez jamais incrément
i
, de sorte que la boucle while continue au-delà de la fin du fichier. Comme pour la sommation, faire quelque chose de ce genre.Cela va démarrer jusqu'à ce que hasNextInt() retourne false, ce qui se produit lorsque l'élément suivant le scanner voit n'est pas un entier. Cela pourrait être non-entrée numérique ou la fin du fichier. Cela signifie que vous n'êtes plus limité à 25 entiers - il vous lire autant qu'elle peut avant de s'arrêter.
Parce que vous n'avez jamais incrément
i
, il ne change jamais de 0, il est donc toujours inférieur à 25. Cela signifie qu'il essaie de regarder de nouveau après qu'il a fait 25 éléments, mais il n'y a pas de 26, donc il y a une exception.Au lieu d'un
while
boucle, je vous recommande unfor
boucle.De somme, au lieu de les imprimer, il suffit de l'ajouter à un accumulateur.
imprimer la somme.
nextInt()
en Java, vous pensez peut-être de C# 😉En plus de lockstock réponse, vous pourriez envisager l'ajout de texte.hasNext() OU un fichier texte.hasNextInt() pour votre boucle while.
}
Vous aurez à faire chose suivante
Il déclenche une exception parce que vous n'avez pas d'incrément
i
dans la boucle. Dans le cas où si le nombre d'entiers dans le fichier d'entrée est inconnu, vous pouvez utiliser leScanner.hasNextInt()
méthode de vérification de la présence de la prochaine entier (ou tout simplement utiliserhasNext()
pour vérifier EOF).Vous pouvez additionner les nombres comme dans l'extrait de code ci-dessous:
ou
Vous obtenez l'erreur (exception) parce que votre fichier a un très grand nombre qui ne tiennent pas sur Entier types. Vous devez utiliser Long.
Utilisez:
aScanner.nextLong()
au lieu deaScanner.nextInt()
.EDIT: Vous devez également modifier le type de la
sum
variable deint
àlong
.Votre code fonctionne très bien.
sum = sum + aScanner.NextLong();
mais j'obtiens toujours la même erreur.sum
deint
àlong
.1. Votre
i
est jamais Incrémenté.2. Vous êtes pas additionnant les chiffres.
3.
addstuff(diskScanner)
est unstatic memeber
, afin de l'appeler avec nom de la classe avec l'opérateur point.Par exemple: