Ich habe eine Textdatei, die zum Beispiel in jeder Zeile einen Namen und eine Folge von ganzen Zahlen enthält
Jules 50 60 40
Ali 45 70 70 90
Emma 45 54
Ich habe dies für meinen Code, aber es druckt nicht den Durchschnitt aus. Ich bin mir auch nicht sicher, wie ich die Folge von ganzen Zahlen lesen soll
public void AverageMarks(String fName, String pname) {
BufferedReader br = null;
try{
br = new BufferedReader(new FileReader(fName));
}catch(FileNotFoundException e){
System.out.println("Could not find file");
}
try{
double average = 0;
double sum = 0;
String line;
while((line = br.readLine()) != null){
String[] lines = line.split(" ");
if(pname.equals(lines[0])){
for(int i =0; i<lines.length; i++){
sum+= Double.parseDouble(lines[i+1]);
}
average = sum / lines.length;
System.out.println(average);
System.exit(0);
}
else{
System.out.println(pname + " No such name");
System.exit(0);
}
}
}catch(IOException e){
System.out.println("An error has occured");
}
finally{
System.exit(0);
}
}
Zum Beispiel ist der Durchschnitt ein doppeltes ...
AverageMarks("myfile.txt","Jules")
sollte drucken 50.0
AverageMarks("myfile.txt","Ali")
sollte drucken 68.75
AverageMarks("myfile.txt","Neil")
sollte drucken Neil No such name
Das Problem ist, dass Sie keinen else
Block in Ihrer while
Schleife haben sollten. else
Blockanweisungen sollten nicht angezeigt werden, um sicherzustellen, dass Sie alle Zeilen in der Datei verarbeitet haben und kein solcher Name vorhanden ist. Es gab auch ein Problem mit dem for
Schleifenindex. Es sollte 1
nicht von beginnen 0
. Versuche dies:
public void AverageMarks(String fName, String pname) {
BufferedReader br = null;
try{
br = new BufferedReader(new FileReader(fName));
}catch(FileNotFoundException e){
System.out.println("Could not find file");
}
try{
double average = 0;
double sum = 0;
String line;
while((line = br.readLine()) != null){
String[] lines = line.split(" ");
if(pname.equals(lines[0])){
if(lines.length > 1) { // check to calculate average only when there are numbers as well in the line
for(int i = 1; i<lines.length; i++){ // loop index shold start from 1 as element at index 0 is name
sum+= Double.parseDouble(lines[i]);
}
average = sum / (lines.length - 1);
}
System.out.println(average);
System.exit(0);
}
}
// moved these lines from inside loop, to make sure all the names in the files have been checked
System.out.println(pname + " No such name");
System.exit(0);
}catch(IOException e){
System.out.println("An error has occured");
}
finally{
System.exit(0);
}
}
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen