如何读取令牌x和y

时间:2013-07-08 17:58:07

标签: java token

我从网上找到的一本书开始学习Java。我解决了很多练习,但是我在这个练习中。我的问题是,我找不到关于如何告诉程序的答案,如果你读“x”,你会发现下一个整数添加到sumx。如果你读“y”,你会发现下一个整数加到sumy。以下是问题和我的代码。

假设文本文件如下所示:

x= 10
y= -45
y= 98
x= 13
x= 37
y= 36
x= -2

。 。

每一行都以“x =​​”或“y =”开头,但它们中的哪一个开始时没有任何模式。其中每一个后跟一个空格,然后是一个整数。行上的整数没有其他内容。

  

编写一个读取此数据文件的程序,并计算x值和y值之和的总和。提示:使用hasNext()和next()读取“x =”和“y =”标记,然后使用nextInt()读取整数。您还需要String的equals()方法。

import java.util.Scanner;
import java.io.*;
class Separatesums {
    public static void main(String[] args) throws IOException {
        int sumx = 0, sumy = 0, num = 0;

        File file = new File("input.txt");
        Scanner scan = new Scanner(file);

        while (scan.hasNext()) {
            if (scan.hasNext.equals("x")) {
                num = scan.nextInt();
                sumx = sumx + num;
            } else {
                if (scan.hasNext.equals("y")) {
                    num = scan.nextInt();
                    sumy = sumy + num;
                }
            }
        }
        System.out.println("Sum x is: " + sumx + " Sum y is: " + sumy);
    }
}

3 个答案:

答案 0 :(得分:3)

我认为您的scan.hasNext.equals("x")不正确。如果用scan.next().equals("x=")替换它,事情可能会有所改善。此外,你正在扫描两次。如果您的第一次扫描失败,您的下一个if语句将导致您再向前扫描一行。

以下方法可行:

import java.util.Scanner;

public class x {
  public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    int exes = 0;
    int whys = 0;
    while (scan.hasNext())
    {
      String line = scan.next();
      if (line.equals("x="))
        exes+=scan.nextInt();
      else
        whys+=scan.nextInt();
    }
    System.out.println("X: " + exes);
    System.out.println("Y: " + whys);
  }
}

答案 1 :(得分:2)

你有正确的想法,但是你有一些语法和逻辑错误。我不想完全为你解决这个问题,但这里有一些注意事项

  1. 级联方法调用在每个方法后仍需要括号。它应该是scan.hasNext().equals("x"),而不是`scan.hasNext.equals(“x”)

  2. 使用级联调用时,请考虑每个方法后返回的数据类型。 hasNext()返回的数据类型是什么?询问该数据类型是否等于给定的字符串是否有意义?

  3. 请记住,hasNext()不会消耗文件中的任何数据。您应该只使用它来查看是否有任何要读取的数据,但如果存在,则必须使用next()或其某些变体来实际获取数据。同样,请注意从文件中读取太多次(例如使用2个不同的next()调用来读取一个变量)。

  4. equals("x")正在寻找一个精确的匹配。还有其他字符串方法可用于查看字符串是否以字符序列开头,或者您应该使用您期望匹配的确切模式(即“x =”)。

  5. 这些练习的目的是帮助您像程序员一样思考。即使有人为您提供了工作代码,请确保在使用之前详细了解每一行。

答案 2 :(得分:1)

试试这个

 import java.io.BufferedReader;
 import java.io.FileReader;
 import java.io.IOException;
 public class Read {
 public static void main(String[] args) throws IOException {
    FileReader file=new FileReader("D:\\Test.txt");
    BufferedReader br=new BufferedReader(file);
    String str;
    int xSum=0;
    int ySum=0;
    while((str=br.readLine())!=null)
    {
        if(str.contains("x=")){
            xSum+=Integer.parseInt(str.split("=")[1].trim());
        }if(str.contains("y=")){
            ySum+=Integer.parseInt(str.split("=")[1].trim());
        }
    }
    System.out.println("Sum x is: "+xSum+" Sum y is: "+ySum);
}
}