我正在阅读两行.txt文件(ui.UIAuxiliaryMethods;用于此)来计算患者的BodyMassIndex(BMI),但是当达到patientLenght时我得到输入误码。这是我的两行输入,由\ t \ t分隔:
Daan Jansen M 1.78 83
Sophie Mulder V 1.69 60
它按名称排序 - 性别 - 长度 - 重量。这是我的代码,用于保存字符串,双精度和整数中的所有元素:
package practicum5;
import java.util.Scanner;
import java.io.PrintStream;
import ui.UIAuxiliaryMethods;
public class BodyMassIndex {
PrintStream out;
BodyMassIndex() {
out = new PrintStream(System.out);
UIAuxiliaryMethods.askUserForInput();
}
void start() {
Scanner in = new Scanner(System.in);
while(in.hasNext()) {
String lineDevider = in.nextLine(); //Saves each line in a string
Scanner lineScanner = new Scanner(lineDevider);
lineScanner.useDelimiter("\t");
while(lineScanner.hasNext()) {
String patientNames = lineScanner.next();
String patientSex = lineScanner.next();
double patientLength = lineScanner.nextDouble();
int patientWeight = lineScanner.nextInt();
}
}
in.close();
}
public static void main(String[] args) {
new BodyMassIndex().start();
}
}
有人为此得到了解决方案吗?
答案 0 :(得分:2)
您的名字有两个令牌而不是一个,因此lineScanner.next()
只会获得第一个名称的令牌。
由于名称理论上可以包含2个以上的令牌,因此请考虑使用String.split(...)
,然后分别将最后两个令牌解析为数字,分别为double和int,将最后一个令牌中的第三个解析为性别,并将剩余的令牌解析为这个名字。
另一个问题是你在使用它时没有关闭你的lineScanner对象,所以如果你继续使用这个对象,不要忘记在完成后释放它的资源。
答案 1 :(得分:0)
您的姓名字段有两个令牌。而你正试图将它们视为一体。那;创造问题。 您可以使用“(双引号)将名称值与其他名称分开。字符串标记符可以完成您的工作。
答案 2 :(得分:0)
我在输入文件中将点更改为逗号。万岁。