0

患者の BodyMassIndex(BMI) を計算するために .txt ファイル (ui.UIAuxiliaryMethods; が使用されます) の 2 行を読み込んでいますが、patientLenght に達すると inputmismatchexception が発生します。これらは、\t で区切られた 2 行の入力です。

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

誰かがこれに対する解決策を得ましたか?

4

3 に答える 3

2

あなたの名前には 1 つではなく 2 つのトークンがあるlineScanner.next()ため、名前のトークンのみが取得されます。

名前は理論的には 2 つ以上のトークンを持つことができるため、String.split(...)代わりに最後の 2 つのトークンを数値として使用して解析することを検討してください。それぞれ double と int であり、最後から 3 番目のトークンは性別、残りのトークンは名前です。

もう 1 つの問題は、使い終わったときに lineScanner オブジェクトを閉じていないことです。したがって、このオブジェクトを使い続ける場合は、使い終わったらそのリソースを解放することを忘れないでください。

于 2012-11-28T15:37:26.787 に答える
0

入力ファイルのドットをコンマに変更しました。やったー。

于 2012-11-30T12:49:59.813 に答える
0

あなたの名前フィールドには 2 つのトークンがあります。そしてあなたはそれらを一つとして扱おうとしています。それが問題を引き起こしています。" (二重引用符) を使用して、名前の値を他の値から分離できます。文字列トークナイザーが作業を行う場合があります。

于 2012-11-28T15:41:09.657 に答える