【问题标题】:how do you work with data uploaded from files? e.g., calculate the sum? java您如何处理从文件上传的数据?例如,计算总和?爪哇
【发布时间】:2011-06-04 09:15:37
【问题描述】:

我使用扫描仪将文本文件读入 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);

但我不太确定该怎么做。你能帮我吗?

【问题讨论】:

    标签: java arrays file


    【解决方案1】:

    变量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;
    }
    

    【讨论】:

    • 从你的方法中移除 static 修饰符。
    • 已修复,缺少返回类型。
    • 嗨,JG。真的对不起。这是我的错。我唯一需要做的就是使用 public int getTotal()。非常感谢您的帮助。
    【解决方案2】:

    您的错误在于 parseLine 方法。

    int total =+ distance;
    

    你不是在增加,而是在重置你的总数

    删除整数

    定义

    public static int total = 0;
    

    所以你的代码看起来像:

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

    【讨论】:

    • 谢谢。我在方法之外声明了静态整数变量,但我得到了 DataScanner.java:44: cannot find symbol symbol : variable distance location: class DataScanner int total =+ distance;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多