因此,自从加入这个社区以来,我收到了一些提示并获得了一些学习Java的资源。我现在已经上课了6周,正在完成我的第三个项目。我觉得我学到了很多,但如果我想掌握Java,我还有很长的路要走。
这次我的问题是如何让我的代码将多个输出保存到文件中?
我当前项目的一部分是执行以下操作:
“当窗口关闭时,效率值应使用> n值从0到10计算并写入文件。文件>>的每一行应包含n的值,效率>> n的值和递归方法的效率的迭代方法。值>应该用逗号分隔,这样就可以用Excel打开文件了。“
我设法让程序在输出文件中写入一个条目。但是,我要么在代码中出错,要么遗漏了一些关键的东西。有人能指出我正确的解决方案吗?我想我可能要创建一个数组,将输出存储在那里,然后将数组输出到csv。我看过roseindia和viralpatel,但那些并没有透露我的希望。
顺序(第一部分搞砸了)
package cmisproject3;
import java.awt.*;
import java.awt.event.*;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import javax.swing.*;
public class CMISProject3 extends JFrame implements ActionListener {
private final int TWICE = 2;
private JLabel jLabel1 = new JLabel(), jLabel2 = new JLabel(), jLabel3 = new JLabel(), jLabel4 = new JLabel(), jLabel5 = new JLabel(), jLabel6 = new JLabel();
private ButtonGroup radioButtons = new ButtonGroup();
private JRadioButton iterativeBtn = new JRadioButton(), recursiveBtn = new JRadioButton();
private JTextField enterN = new JTextField(16), textResult = new JTextField(16), textEfficiency = new JTextField(16);
private JButton computeBtn = new JButton();
private int efficiency;
private Sequence sequence;
private static FileWriter fileWriter;
private File file = new File("output.txt");
// Beginning of the constructor for the GUI
public CMISProject3() throws IOException {
sequence = new Sequence();
setSize(300, 200); // define size of GUI
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().setLayout(new GridLayout(6, 2));
getContentPane().add(jLabel4);
radioButtons.add(iterativeBtn);
iterativeBtn.setSelected(true); // sets Iterative as default GUI selection
iterativeBtn.setText("Iterative");
getContentPane().add(iterativeBtn);
getContentPane().add(jLabel5);
radioButtons.add(recursiveBtn);
recursiveBtn.setText("Recursive");
getContentPane().add(recursiveBtn);
jLabel1.setText("Enter n: ");
getContentPane().add(jLabel1);
getContentPane().add(enterN);
getContentPane().add(jLabel6);
computeBtn.setText("Compute");
computeBtn.addActionListener(this);
getContentPane().add(computeBtn);
jLabel2.setText("Result: ");
getContentPane().add(jLabel2);
getContentPane().add(textResult);
textResult.setEditable(false);
jLabel3.setText("Efficiency: ");
getContentPane().add(jLabel3);
getContentPane().add(textEfficiency);
textEfficiency.setEditable(false);
pack();
}
public void actionPerformed(ActionEvent event) {
int result;
efficiency = 0;
try {
fileWriter = new FileWriter(file);
} catch (IOException e1) {
e1.printStackTrace();
}
if (iterativeBtn.isSelected()) {
result = sequence.computeIterative(Integer.parseInt(enterN.getText()));
} else {
result = sequence.computeRecursive(Integer.parseInt(enterN.getText()));
}
try {
System.out.println(result);
fileWriter.write(result + ", " + sequence.getEfficiency());
} catch (IOException e) {
e.printStackTrace();
}
textResult.setText(Integer.toString(result));
textEfficiency.setText(Integer.toString(sequence.getEfficiency()));
try {
fileWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws IOException {
CMISProject3 CMISProject3 = new CMISProject3();
CMISProject3.setVisible(true);
}
}
GUI(钉它?)
Select * from testtable where arovaica = REPLACE(@passedvalue, '', '''')
对于那些感兴趣的人,这里是我正在进行的参数。 Instructions
答案 0 :(得分:0)
每次执行操作时都会重新打开文件,而不会告诉FileWriter追加而不是覆盖。
答案 1 :(得分:0)
我认为你的项目有一个良好的开端。但是,除了你的问题,我还会看到其他问题。
首先,我会解决您的问题,然后转到其他项目。我假设当你说:
将单个条目写入输出文件
你说你能够在文件中写一行。这意味着你的问题是:我怎样才能在文件中写多行?
在这种情况下,您至少有两个选择。一种是将FileWriter
设置为append,而不是覆盖现有文件内容的默认行为。
另一种选择是避免在你完成写作之前关闭FileWriter
。例如,您可以通过将fileWriter
的构造移动到GUI的构造函数并将调用移动到close
方法到GUI关闭时触发的事件处理程序来完成此操作。 p>
无论你选择做什么,你都需要记住在每一行的末尾写下换行符,否则你的文件将是一个非常长的行。所以,修改你现在拥有的东西看起来像这样:
fileWriter.write(result + ", " + sequence.getEfficiency()+"\n");
其他问题:
您的Sequence.computeRecursiveHelper
方法不是递归的。递归方法调用自身,你的不会这样做。
我不认为您正确遵循说明。也许你还没有完成,你打算修改你的代码。如果是这种情况,你可以忽略我要指出的内容。说明指出:
当窗口关闭时,效率值应使用0到10的n值计算并写入文件。
每当用户点击" Compute"时,您当前正在写入该文件。按钮而不是上面做的。此外,您还没有写出正确的数据 - 您根据用户的输入而不是使用n从0到10获得的值来编写您获得的值。