Lesen Von Daten Aus Text-Datei Und Die Summe Zahlen
Will ich Lesen Daten aus einer text-Datei die ist voll mit ganzen zahlen und haben das Programm drucken diese ganzen zahlen aus, um den Bildschirm, während Sie zu addieren. Dies sollte nicht schwer sein, aber ich kann es nicht herausgefunden!!!
Hier ist die extrem vereinfachte text-Datei:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Und hier ist mein code, der eigentlich funktionieren:
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++;
}
}
}
Schließlich, hier ist die Ausgabe die ich bekomme:
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)
- Sollten Sie verwenden
nextLong()
stattnextInt()
. Siehe meine Antwort.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wird, die Sie anrufen Textdatei.nextInt() zweimal in der Schleife. Versuchen:
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
Viel intuitiver meiner Meinung nach.Du nie Inkrement
i
, so dass die while-Schleife über das Ende der Datei. Wie für Summen, so etwas wie dies tun.Diese läuft bis hasNextInt() gibt false zurück, die Auftritt, wenn das nächste Element der scanner sieht nicht eine ganze Zahl ist. Dies könnte nicht-numerische Eingabe oder das Ende der Datei. Das heißt, Sie sind nicht mehr beschränkt auf 25 Ganzzahlen - werde es Lesen so viele wie Sie können, bevor Sie zu stoppen.
Weil Sie nie Inkrement
i
, es ändert sich von 0, so ist es immer weniger als 25. Das heißt, es versucht, wieder nach ihm getan hat 25 Elemente, aber es gibt keine 26th, so gibt es eine Ausnahme.Statt einer
while
Schleife, würde ich empfehlen, einefor
Schleife.Summe die Sie, statt Sie zu drucken, nur fügen Sie zu einem Akkumulator.
ausdrucken sollten Sie die Summe.
nextInt()
in Java, Sie werden vielleicht denken C# 😉Neben lockstock Antwort, möchten Sie vielleicht zu prüfen, indem Textdatei.hasNext() ODER Textdatei.hasNextInt() für die while-Schleife.
}
Müssen Sie folgende Sache
Wirft er eine exception, weil Sie nicht Schrittweite
i
in der Schleife. Im Falle dass, wenn die Anzahl der zahlen in der Eingabe-Datei unbekannt ist, können Sie dieScanner.hasNextInt()
Methode zu überprüfen, das Vorhandensein der nächste integer (oder einfachhasNext()
zu prüfen, EOF).Können Sie die Summe der zahlen wie im Codeausschnitt unten:
oder
Sind Sie immer der Fehler (die Ausnahme), weil deine Datei hat sehr große zahlen, die nicht passen auf Integer Arten. Sie verwenden sollten, Lange.
So verwenden Sie:
aScanner.nextLong()
stattaScanner.nextInt()
.EDIT: sollten Sie auch ändern Sie den Typ der
sum
variable ausint
zulong
.Dein code funktioniert Prima.
sum = sum + aScanner.NextLong();
aber ich bekomme immer noch den gleichen Fehler.sum
ausint
zulong
.1. Ihre
i
ist nie Erhöht.2. Sie sind nicht addieren der zahlen.
3.
addstuff(diskScanner)
ist einstatic memeber
, so rufen Sie es mit Klassenname mit Punkt-operator.ZB: