Java 如何读取令牌x和y
我从网上找到的一本书开始学习Java。我做了很多练习,但这次我做得很好。我的问题是,我找不到一个关于如何告诉程序,如果你读“x”,你找到的下一个整数将添加到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=”开头不遵循任何模式。每一个后面都跟一个空格,然后是一个整数。一行中的整数后面没有其他
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用于解释