Java 如何读取令牌x和y

Java 如何读取令牌x和y,java,token,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=”开头不遵循任何模式。每一个后面都跟一个空格,然后是一个整数。一行中的整数后面没有其他

我从网上找到的一本书开始学习Java。我做了很多练习,但这次我做得很好。我的问题是,我找不到一个关于如何告诉程序,如果你读“x”,你找到的下一个整数将添加到
sumx
。如果读取“y”,则将找到的下一个整数添加到
sumy
。下面是问题和我的代码

假设文本文件如下所示:

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

每行以“x=”或“y=”开头,但其中哪一行以“x=”或“y=”开头不遵循任何模式。每一个后面都跟一个空格,然后是一个整数。一行中的整数后面没有其他内容

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


我认为您的
扫描.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);
  }
}

我认为您的
扫描.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);
  }
}

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

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

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

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

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


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

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

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

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

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

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

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

    试试这个

     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);
    }
    }
    
    试试这个

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

    是的y=-45不是我的错。我想从每个人那里得到电话号码line@user2561683检查我的代码是y=-45不是y=-45我的错误。我想从每个人那里得到电话号码line@user2561683查看我的代码我认为你不需要使用
    BufferedReader
    。OP正在使用
    Scanner
    ,然后您可以将代码用于
    ,而(Scanner#hasNextLine())
    将逐行读取文件并应用相同的逻辑。是的。你想要什么就用什么:)我认为你不需要使用
    BufferedReader
    。OP正在使用
    Scanner
    ,然后您可以将代码用于
    ,而(Scanner#hasNextLine())
    将逐行读取文件并应用相同的逻辑。是的。你想要什么就用什么:)Thx crand6用于解释Thx crand6用于解释