2016-06-30 3 views
-2

私はかなり新しいJavaです。私は自分のコードを3つのクラスに分けたいと思う。最初のクラスは私のGUIを含み、2番目はアルゴリズムを計算し、3番目のクラスは結果をファイルに書き出す。私はコードが動作しているが、私は3つの別々のクラスでは、基本的に私のメソッドComputer()でそれを分割することはできません。私は3つのステップをすべて持っていると私は2つの別のクラスでそのメソッドを分割したいので、アルゴリズムクラスとライターからファイルクラスへの変換。私は私の試みで3枚の画像をアップロードします、ありがとうございます。プログラムを3つのクラスに分割する(継承)

import javax.swing.*; 
import java.awt.BorderLayout; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 
import java.io.*; 
import java.util.ArrayList; 
import java.util.List; 

public class PrimeNumbers { 

    private JFrame frame; 
    private JTextField textField; 


    public static void main(String[] args) { 



     PrimeNumbers window = new PrimeNumbers(); 
     window.frame.setVisible(true); 
    } 


    public PrimeNumbers() { 
     initialize(); 
    } 


    public List<Integer> Calculate() throws IOException { 
     String getTxt = textField.getText(); 
     Integer x = Integer.parseInt(getTxt); 
     List<Integer> list = new ArrayList<>(); 

     boolean [] isComposite = new boolean [x + 1]; 
     isComposite[1] = true; 


     for (int i = 2; i <= x; i++) { 
      if (!isComposite[i]) { 

       list.add(i); 
       int multiple = 2; 
       while (i * multiple <= x) { 
        isComposite [i * multiple] = true; 
        multiple++; 
       } 
      } 
     } 
     File file = new File("C:/Users/TudorV/Desktop/File.csv"); 


     FileWriter fw = new FileWriter(file.getAbsoluteFile()); 
     BufferedWriter bw = new BufferedWriter(fw); 
     bw.write(String.valueOf(list)); 
     bw.close(); 
     JOptionPane.showMessageDialog(frame, list); 
     return list; 
    } 



    private void initialize() { 
     frame = new JFrame(); 
     frame.setBounds(100, 100, 450, 300); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     textField = new JTextField(); 
     frame.getContentPane().add(textField, BorderLayout.NORTH); 
     textField.setColumns(10); 

     JButton btnGetPrimeNumbers = new JButton("Get prime numbers"); 
     btnGetPrimeNumbers.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent arg0) { 
       try { 
        Calculate(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 

      } 
     }); 
     frame.getContentPane().add(btnGetPrimeNumbers, BorderLayout.SOUTH); 
    } 

} 
+1

。 :-)もっと正確に言えば、あなたを止めていますか? –

+0

あなたの試みや、それがうまくいくと思われる方法の簡略化した説明を教えてください。それに加えて、大文字で始まるメソッド名(例: 'List Calculate()')を妨げるJavaコードの規約を見てください。 – Thomas

+0

私はあなたのコードがうまくいけば、 –

答えて

0

Javaでは、他のクラスメソッドにアクセスするには、new演算子を使用してそれらのクラスのインスタンスを作成する必要があります。 PrimeNumbersは、mainメソッドを持つクラスであるので、あなたのケースでは、あなたはこのすべてがで行われなければなら

Writer writer = new Writer(); 
writer.write(list); 

ファイルを書き込むために、クラス内

同様
Computer computer = new Computer(); 
List<Integer> list = computer.Calculate(5); 

をこのような何かをしますそれらの機能を実行する適切な場所。 Javaの詳細を学ぶための

第3のリンク - 礼儀グーグル

Oracle - Learning Java

Tutorials Point

Java Beginners Tutorial

0

あなたのクラスには有用であるために何かを拡張する必要はありませんが、スイングを使用する場合は、JFrameオブジェクトをすべて接頭辞する必要がないように、JFrameを拡張すると便利なことがよくあります。 1つの選択肢は、異なるクラス間でコードを再利用できるようにutlityクラスを作成することです。

try-with-resources(Java 7)やlambda expressions(Java 8)などの機能を使用することもできます。

をお勧めしますPrimeNumbers.java

public class PrimeNumbers extends JFrame { 
    public static void main(String[] args) { 
     new PrimeNumbers(); 
    } 

    public PrimeNumbers() { 
     JTextField textField = new JTextField(10); 
     JButton btnGetPrimeNumbers = new JButton("Get prime numbers"); 
     btnGetPrimeNumbers.addActionListener(arg -> { 
      int num = Integer.parseInt(textField.getText()); 
      List<Integer> primes = PrimesUtil.getPrimesLessThan(num); 
      FilesUtil.writeToFile(primes.toString()); 
      JOptionPane.showMessageDialog(this, primes); 
     }); 

     getContentPane().add(textField, BorderLayout.NORTH); 
     getContentPane().add(btnGetPrimeNumbers, BorderLayout.SOUTH); 

     setBounds(100, 100, 450, 300); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setVisible(true); 
    } 
} 

PrimesUtil.java

public class PrimesUtil { 
    public static List<Integer> getPrimesLessThan(int x) { 
     List<Integer> list = new ArrayList<>(); 
     boolean[] isComposite = new boolean[x + 1]; 
     isComposite[1] = true; 
     for (int i = 2; i <= x; i++) { 
      if (!isComposite[i]) { 
       list.add(i); 
       int multiple = 2; 
       while (i * multiple <= x) { 
        isComposite[i * multiple] = true; 
        multiple++; 
       } 
      } 
     } 
     return list; 
    } 
} 

FilesUtil.java

public class FilesUtil { 
    public static void writeToFile(String str) { 
     File file = new File("C:/Users/TudorV/Desktop/File.csv"); 
     try (Writer w = new BufferedWriter(new FileWriter(file))) { 
      w.write(str); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

すばらしい説明をありがとう! –