我从网上找到的一本书开始学习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);
}
}
答案 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)
你有正确的想法,但是你有一些语法和逻辑错误。我不想完全为你解决这个问题,但这里有一些注意事项
级联方法调用在每个方法后仍需要括号。它应该是scan.hasNext().equals("x")
,而不是`scan.hasNext.equals(“x”)
使用级联调用时,请考虑每个方法后返回的数据类型。 hasNext()
返回的数据类型是什么?询问该数据类型是否等于给定的字符串是否有意义?
请记住,hasNext()
不会消耗文件中的任何数据。您应该只使用它来查看是否有任何要读取的数据,但如果存在,则必须使用next()
或其某些变体来实际获取数据。同样,请注意从文件中读取太多次(例如使用2个不同的next()
调用来读取一个变量)。
equals("x")
正在寻找一个精确的匹配。还有其他字符串方法可用于查看字符串是否以字符序列开头,或者您应该使用您期望匹配的确切模式(即“x =”)。
这些练习的目的是帮助您像程序员一样思考。即使有人为您提供了工作代码,请确保在使用之前详细了解每一行。
答案 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);
}
}