0

ユーザー入力を取得してから体積計算を実行する必要があるプロジェクトがあります。これらはすべて、いくつかの異なる形状に対して達成しました。ただし、入力と計算を各形状のファイルに保存し、選択した場合に後で読み取ることができるようにする必要があります。私はこれをいくつかの異なる方法で実行しようとしましたが、役に立ちませんでした。最近の試行を除いて、すべてが構文エラーを引き起こしました。ただし、この試みはファイルに書き込むようには見えず、1 行で 0.0 しか返されません。どんな助けでもいただければ幸いです

public JButton getCalculateButton()
{
    JButton spa; 
    spa = new JButton("Calculate Volume");
    spa.setMnemonic('C');
    spa.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e)
        {               
            DecimalFormat num = new DecimalFormat(",###.##");
            double length, depth, volume;
            String instring;

            instring = lengthField.getText();
            if (instring.equals("")){
                instring = "0";
                lengthField.setText("0");
            }
            length = Double.parseDouble(instring);

            instring = depthField.getText();
            if (instring.equals("")){
                instring = "0";
                depthField.setText("0");
            }
            depth = Double.parseDouble(instring);

            volume = length * 8 * 4.8284 * depth;
            volumeField.setText(num.format(volume));

        }
    });
    return spa;
}

public JButton getSaveButton(){
    JButton save; 
    save = new JButton("Save Data");
    save.setMnemonic('C');
    save.addActionListener(new ActionListener(){

        public void actionPerformed(ActionEvent e) {

            PrintWriter writer;
            try {
                writer = new PrintWriter(new FileWriter("spaFile.txt"));
                writer.printf(String.valueOf(length), String.valueOf(depth), String.valueOf(volume));
                writer.close();

            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }

        }           
    });

    return save;
}

これは私の GUI の一部であり、計算を行い、できればデータを保存していたはずですが、そうではありません。

public JButton getSearchButton()
{
    JButton search; 
    search = new JButton("Search");
    search.setMnemonic('S');
    search.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e)
        {               
            FileInputStream fileStream;
            try {
                fileStream = new FileInputStream("spaFile.txt");
                 DataInputStream in = new DataInputStream(fileStream);
                    BufferedReader reader = new BufferedReader(new InputStreamReader(in));
                    System.out.println(reader.readLine());
                    reader.close();
            } catch (FileNotFoundException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }

        }
    });
    return search;
}

}

それは読むべき部分ですが、テスト目的でまだ GUI として完全には持っていません。

4

2 に答える 2

1

問題はここにあると思います

writer.printf(String.valueOf(length), String.valueOf(depth), String.valueOf(volume));

printf印刷形式です。あなたはそれについてここで読むことができます. データの保存方法に応じて、printまたはのいずれかを使用する必要があります。println3 つの値を別々の行に保存するには、次を使用できます。

writer.println(String.valueOf(length));
writer.println(String.valueOf(depth));
writer.println(String.valueOf(volume));

または、それらをコンマで区切って同じ行に配置したい場合は、使用できます

writer.print(String.valueOf(length) + "," + String.valueOf(depth) + "," + String.valueOf(volume));
于 2013-02-24T17:26:35.620 に答える
1

私はあなたが本当に欲しいかどうかわからない

writer.printf(String.valueOf(length), String.valueOf(depth),
    String.valueOf(volume));

保存ボタンの ActionListener で。そのステートメントはString.valueOf(length)、書式設定される文字列として使用され、その後のすべてが書式指定として使用されます。あなたはおそらく欲しい

writer.printf(String.valueOf(length) + ", " + String.valueOf(depth) +
    ", " + String.valueOf(volume));

lengthまた、depth、 、 にアクセスする場合volumeは、これらの変数を実際に表示できるスコープにいることを確認してください。これらすべての値が 0.0 として表示される場合は、それらの値を読み取った場所に必要な値を割り当てていないことを意味します。


最近、情報を .txt ファイルに保存するために使用したコードを次に示します。

try {
        FileWriter writer = new FileWriter(path);

        for (Movie movie : movies) {
            writer.write(movie.toString() + LINE_SEPARATOR);
        }

        writer.close();
    } catch (IOException e) {
        e.printStackTrace();
    }

変数の名前がその目的を示していることを願っています。注: これにより、コードを使用するたびにファイルの内容が上書きされます。ファイルに何かを追加するには、Writer#append(..);を使用します。そのドキュメントを参照してください(おそらく、一般的なサブクラスではなく、特定のサブクラスが必要であることに注意してくださいWriter)。

于 2013-02-24T17:22:07.510 に答える