как вы работаете с данными, загруженными из файлов?например, рассчитать сумму?Джава - PullRequest
2 голосов
/ 06 января 2011

Я использовал сканер для чтения текстового файла в программу Java. Теперь я хочу вычислить сумму всех целочисленных значений в файле. Структура файла проста.

Nottinghill_Gate,120
High_Street_Kensignton,100
Gloucester_Road,50
South_Kensignton,200
Sloane_Square,100
Victoria,300
St_James_Park,200
Westminster,100
Embankment,200
Temple,150
Blackfriars,200
Mansion_House,300
Cannon_Street,190
Monument,200
Tower_Hill,160
Aldgate,190
Liverpoool_Street,60
Moorgate,50
Barbican,120
Farrington,130
Kings_Cross_St_Pancras,150
Euston_Square,180
Great_Portland_Street,120
Baker_Street,135
Edware_Road,112
Paddington,115
Bayswater,165

мой код

import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;
 public class DataScanner {
 public static void readFile(String fileName) {
   try {
     Scanner scanner =
       new Scanner(new File(fileName));
     scanner.useDelimiter
       (System.getProperty("line.separator")); 
     while (scanner.hasNext()) {
       parseLine(scanner.next()); 
       //int total =+ distance;
   }


     scanner.close();
   } catch (FileNotFoundException e) {
     e.printStackTrace();
   }
 }

  public static void parseLine(String line) {
   Scanner lineScanner = new Scanner(line);
   lineScanner.useDelimiter("\\s*,\\s*");
   String current = lineScanner.next();
   int distance = lineScanner.nextInt();
   System.out.println("The current station is " + current + " and the destination to the next station is " + distance + ".");
   int total =+ distance;
   System.out.println("The total distance is " + total);
  }

 public static void main(String[] args) {
   if (args.length != 1) {
     System.err.println("usage: java TextScanner2"
       + "file location");
     System.exit(0);
   }
   readFile(args[0]);
 }}

Я знаю, что должен измениться

int distance = lineScanner.nextInt();
System.out.println("The current station is " + current + " and the destination to the    next station is " + distance + ".");
int total =+ distance;
System.out.println("The total distance is " + total);

Но я не совсем уверен, как это сделать. Не могли бы вы помочь мне, пожалуйста?

Ответы [ 2 ]

2 голосов
/ 06 января 2011

Переменная total является локальной переменной , инициализированной для каждой строки, поэтому она всегда будет содержать расстояние до каждой строки. Чтобы получить сумму, вам нужно сохранить ее как переменную класса . Кроме того, вы не должны использовать статические методы.

public class DataScanner {
  private int total = 0;

  public int getTotal() {
    return total;
  }

  public void readFile(String fileName) { 
    // ...
  }

  public void parseLine(String line) {
    // ...
    total += distance; // update class variable
  } 

  public static void main(String[] args) {
    DataScanner scanner = new DataScanner();
    scanner.readFile(args[0]);
    System.out.println("The total distance is " + scanner.getTotal() + ".");
  }
}

В качестве альтернативы, вы можете вернуть расстояние каждой строки из метода parseLine и суммировать их все в readFile:

public void readFile(String fileName) {
  // ...
  int total = 0;
  while (scanner.hasNext()) {
    int distance = parseLine(scanner.next());
    total =+ distance;
  } 
  System.out.println("The total distance is " + scanner.getTotal() + ".");
}

public int parseLine(String line) {
  // ...
  return distance;
}
0 голосов
/ 06 января 2011

Ваша ошибка в методе parseLine.

int total =+ distance;

Вы не увеличиваете, а просто сбрасываете сумму

удалить int

определить

public static int total = 0;

так ваш код будет выглядеть так:

public class DataScanner {
  public static int total = 0;
  public static void readFile(String fileName) {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...