我正在寫一個GUI程序,它使用在單獨的Sequence類中定義的迭代或遞歸方法來計算數字序列中的第n個元素。我想要這樣做,以便當用戶關閉窗口時,序列的前十個元素將被寫入文本文件,同時這兩個方法的效率都會以逗號分隔。文件沒有被寫入,已經關閉文件
由於某種原因,當我關閉窗口時,文件沒有被寫入。我已經確信,該文件是關閉的,所以我不知道爲什麼沒有被寫入文件
GUI
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.*;
import java.util.*;
public class recursiveGUI extends JPanel
{
int counterEfficiency;
private JFrame frame;//The frame
private JPanel panel;//The panel
private JRadioButton iterative;
private JRadioButton recursive;
private JLabel enter;
private JTextField enter2;
private JButton compute;
private JLabel result;
private JTextField result2;
private JLabel efficiency;
private JTextField efficiency2;
private ButtonGroup radioButtons;
public recursiveGUI()
{
frame=new JFrame("Project 3");
panel=new JPanel();
iterative=new JRadioButton("Iterative");
recursive=new JRadioButton("Recursive");
enter=new JLabel("Enter n");
enter2=new JTextField("");
compute=new JButton("Compute");
result=new JLabel("Results");
result2=new JTextField("");
efficiency=new JLabel("Efficiency");
efficiency2=new JTextField("");
radioButtons=new ButtonGroup();
frame.addWindowListener(new WindowAdapter(){
public void windowClosed(WindowEvent e){
try
{
PrintWriter outFile= new PrintWriter("efResults.txt");
for(int n=0;n<=10;n++)
{
String str=n+",";
Sequence.computeIterative(n);
str+=Sequence.getEfficiency();
Sequence.computeIterative(n);
str+=","+Sequence.getEfficiency();
outFile.println(str);
}
outFile.close();
}
catch (FileNotFoundException e1)
{
e1.printStackTrace();
}
}
});
compute.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
int n;
if(iterative.isSelected())
{
String input=enter2.getText();
n=Integer.parseInt(input);
result2.setText(Integer.toString(Sequence.computeIterative(n)));
efficiency2.setText(Integer.toString(Sequence.getEfficiency()));
}
else if(recursive.isSelected())
{
String input=enter2.getText();
n=Integer.parseInt(input);
result2.setText(Integer.toString(Sequence.computeRecursive(n)));
efficiency2.setText(Integer.toString(Sequence.getEfficiency()));
}
}
});
//Adding the parts together
panel.setLayout(new GridLayout(6,2));
radioButtons.add(iterative);
radioButtons.add(recursive);
panel.add(new JLabel());panel.add(iterative);
panel.add(new JLabel());panel.add(recursive);
panel.add(enter);panel.add(enter2);
panel.add(new JLabel());panel.add(compute);
panel.add(result);panel.add(result2);
panel.add(efficiency);panel.add(efficiency2);
frame.add(panel);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setSize(600,300);
frame.setBackground(Color.red);
frame.setVisible(true);
}
//Main method
public static void main(String[] args)
{
recursiveGUI myGUI=new recursiveGUI();
}
}
序列類
public class Sequence
{
static int efficiency;
public static int computeIterative(int n)
{
int result = 0;
if(n==0)
{
result=0;
}
else if(n==1)
{
result=1;
}
else
{
int first=1;
int second=0;
for(int i=2;i<=n;i++)
{
efficiency++;
result=2*second+first;
second=first;
first=result;
}
}
return result;
}
public static int computeRecursive(int n)
{
int result=0;
efficiency++;
if(n==0)
{
result=0;
}
else if(n==1)
{
result=1;
}
else
{
result=2*computeRecursive(n-1)+computeRecursive(n-2);
}
return result;
}
public static int getEfficiency()
{
int result=efficiency;
efficiency=0;
return result;
}
public static void main(String[] args)
{
computeIterative(5);
}
}
如果您正在使用Windows操作系統或其他任何其他檢查驅動器有公共權限來創建/刪除文件,因爲默認C:/ /(Windows操作系統)驅動器沒有這樣的權限。 – Smit
它讓我創建文件;我測試了創建一個新的文本文件並寫入它在一個單獨的類 – Matt
看來,方法* windowClosed()*沒有執行。 –