开发者

how do you work with data uploaded from files? e.g., calculate the sum? java

开发者 https://www.devze.com 2023-02-02 11:58 出处:网络
I have used scanner to read a text file into a java program. I now want to calculate the sum of all integer values in file. The structure of file is simple.

I have used scanner to read a text file into a java program. I now want to calculate the sum of all integer values in file. The structure of file is simple.

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

my code is

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]);
 }}

I know I have to change

int d开发者_开发知识库istance = 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);

But I am not quite sure how to. Could you please help me please?


The variable total is a local variable, initialized for each line, thus it will always contain the distance of each line. In order to have a sum, you need to store it as a class variable. Also, you shouldn't be using static methods.

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() + ".");
  }
}

Alternatively, you could return each line's distance from the parseLine method, and sum them all in 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;
}


Your mistake is in parseLine method.

int total =+ distance;

You are not incrementing, but just reseting your total

remove the int

define

public static int total = 0;

so your code would look like:

public class DataScanner {
  public static int total = 0;
  public static void readFile(String fileName) {
0

精彩评论

暂无评论...
验证码 换一张
取 消