Javaのスキャナから倍精度を読んでいない

編集:コードを間違って配置した

私は、ファイルから傾きを計算するプログラムを持っています。ファイルの形式は次のとおりです。

Y2 'スペース' Y1 'スペース' X2 'スペース' X1 'スペース'

私はスキャナを使用してファイルから文字列を読み込んで、それらをdoubleまたはintegerに変換しています。私がこれをやっているのは、テキストファイルのみの文字列から2倍または整数を読み取っていないように思えるからです。ここに私のコードの一部です:

 modelSlopes.clear();
    modelValues.clear();
    int returnVal = openFileChooser.showOpenDialog(this);

    if (returnVal == JFileChooser.APPROVE_OPTION) {
        File file = openFileChooser.getSelectedFile();
        try {
            Scanner fileScanner = new Scanner(new FileReader(file));
            int count = 1;
            boolean suc = true;
            while (fileScanner.hasNext()) {
                suc = true;
                double tmp1 = 0;
                double tmp2 = 0;
                double tmp3 = 0;
                double tmp4 = 0;
                try {
                    if(count == 1) {
                        tmp1 = Double.valueOf(fileScanner.next());

                    }
                    if(count == 2) {
                        tmp2 = Double.valueOf(fileScanner.next());

                    }
                    if(count == 3) {
                        tmp3 = Double.valueOf(fileScanner.next());

                    }
                    if(count == 4) {
                        tmp4 = Double.valueOf(fileScanner.next());

                    }

                } catch (NumberFormatException e) {

                    try {
                        if(count == 1) {
                            tmp1 = Integer.valueOf(fileScanner.next());
                        }
                        if(count == 2) {
                            tmp2 = Integer.valueOf(fileScanner.next());
                        }
                        if(count == 3) {
                            tmp3 = Integer.valueOf(fileScanner.next());
                        }
                        if(count == 4) {
                            tmp4 = Integer.valueOf(fileScanner.next());
                        }
                    } catch(NumberFormatException e1) {
                        suc = false;
                    }
                }

                if(suc)  {
                    if(count != 4) {
                        count++;
                    }
                    if(count == 4) {
                        count = 1;
                        SlopeSolver tmpS = new SlopeSolver(Double.valueOf(tmp1), Double.valueOf(tmp2), Double.valueOf(tmp3), Double.valueOf(tmp4));
                        modelSlopes.addElement(tmpS.getSlope());
                        modelValues.addElement("Y2 - " + String.valueOf(tmp1) + "; Y1 - " + String.valueOf(tmp2) + "; X2 - " + String.valueOf(tmp3) + "; X1 - " + String.valueOf(tmp4));

                    }
                }
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(this, "Error opening or with file");
        }
    } else {
    }

私がこれをすると、勾配と値に対して0が表示されます。私はそれを働かせるように見えない。私はjavaを初めて使いました。今はかなり無責任です。どんな助けもありがとう。

ここに私がデータを読んでいるテキストファイルがあります:

0.0 2.0 0.0 1.0

〜アンドリュー

1
ここでは基本的なトラブルシューティングスキルを適用し、実行中にコードが何をしているのかを調べる必要があります。デバッガを使用してステップスルーして、ファイルから何を読み込んでいるのか、なぜそれが期待どおりでないのかを確認します。デバッガの使い方に慣れていない場合は、 System.out.println()ステートメントを追加してください。
追加された 著者 Brian Roach,

2 答え

私はコードを簡素化する

Scanner sc = new Scanner(new FileReader(file));
SlopeSolver ss = new SlopeSolver(sc.nextDouble(),
                              sc.nextDouble(), sc.nextDouble(), sc.nextDouble());
sc.close();
5
追加された

ユーザー入力から double を読み取るには fileScanner.nextDouble()を使用し、 int を読むには fileScanner.nextInt() >。

1
追加された
私がそれをするとき、私はまだ0とNaNを取得します
追加された 著者 Andrew Delgadillo,