正确读取两行时的InputMismatchException?

时间:2012-11-28 15:35:22

标签: java

我正在阅读两行.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();
    }
}

有人为此得到了解决方案吗?

3 个答案:

答案 0 :(得分:2)

您的名字有两个令牌而不是一个,因此lineScanner.next()只会获得第一个名称的令牌。

由于名称理论上可以包含2个以上的令牌,因此请考虑使用String.split(...),然后分别将最后两个令牌解析为数字,分别为double和int,将最后一个令牌中的第三个解析为性别,并将剩余的令牌解析为这个名字。

另一个问题是你在使用它时没有关闭你的lineScanner对象,所以如果你继续使用这个对象,不要忘记在完成后释放它的资源。

答案 1 :(得分:0)

您的姓名字段有两个令牌。而你正试图将它们视为一体。那;创造问题。 您可以使用“(双引号)将名称值与其他名称分开。字符串标记符可以完成您的工作。

答案 2 :(得分:0)

我在输入文件中将点更改为逗号。万岁。