2016-12-05 5 views
0

私は、別のSequenceクラスで定義された反復メソッドまたは再帰メソッドを使用して、数値シーケンスのn番目の要素を計算するGUIプログラムを作成しています。ユーザーがウィンドウを閉じると、シーケンスの最初の10個の要素がテキストファイルに書き込まれ、両方の方法の効率がすべての行でコンマで区切られます。ファイルが書き込まれていない、すでにファイルが閉じられている

ウィンドウを閉じると、何らかの理由でファイルが書き込まれていません。何も書かされていない理由を聞いて前にframe.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); を追加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); 
} 

} 
+0

Windows osなどを使用している場合は、デフォルトではC://(windows os)ドライブにはそのようなアクセス許可がないため、ドライブのパブリックアクセス許可を確認してファイルを作成/削除します。 – Smit

+0

ファイルを作成できます。私は新しいテキストドキュメントを作成し、それを別のクラスに書き込むことをテストしました – Matt

+0

メソッド* windowClosed()*は実行されていないようです。 –

答えて

1

を私はすでに、ファイルが閉じていることを確認しましたので、私はよく分かりませんwindowClosedイベントは次のようになります。

frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);//////add 
frame.addWindowListener(new WindowAdapter(){ 
    public void windowClosed(WindowEvent e){ 
     ... 
    } 

setDefaultCloseOperationのデフォルト値はHIDE_ON_CLOSEです。これで、ウィンドウは閉じず、隠されているだけです。

+0

ありがとうございました!私はこの夜のほとんどで立ち往生した! – Matt

関連する問題