0

我从网上找到的一本书开始学习 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);
    }
}
4

3 回答 3

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);
  }
}
于 2013-07-08T18:08:04.220 回答
2

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

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

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

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

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

这些练习的目的是帮助你像程序员一样思考。即使有人给你工作代码,在你使用它之前确保你理解每一行的细节。

于 2013-07-08T18:13:41.950 回答
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);
}
}
于 2013-07-08T18:16:01.350 回答