Java 将程序分为3类(继承)

Java 将程序分为3类(继承),java,Java,我对java相当陌生。我想把我的代码分成3个类。第一个类包含GUI,第二个类计算算法,第三个类将结果写入文件。我有工作的代码,但我不能把它分为3个独立的类,基本上在我的方法计算机中,我有所有的3个步骤,我想把这个方法分为2个独立的类,因此我有GUI类,算法类和writer to file类。我将上传3个图片与我的尝试,谢谢你 import javax.swing.*; import java.awt.BorderLayout; import java.awt.event.ActionListen

我对java相当陌生。我想把我的代码分成3个类。第一个类包含GUI,第二个类计算算法,第三个类将结果写入文件。我有工作的代码,但我不能把它分为3个独立的类,基本上在我的方法计算机中,我有所有的3个步骤,我想把这个方法分为2个独立的类,因此我有GUI类,算法类和writer to file类。我将上传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);
    }

}

在Java中,要访问其他类方法,必须使用new操作符创建这些类的实例。在您的例子中,由于素数是具有主方法的类,因此您将在类内执行类似的操作

Computer computer = new Computer();
List<Integer> list = computer.Calculate(5);
所有这些都必须在您想要执行这些功能的适当位置完成

了解更多java的前三个链接-谷歌


您的类不需要为了有用而扩展任何内容,但是在使用swing时,扩展JFrame通常很有用,这样您就不需要在所有内容前面加上JFrame对象。一种选择是创建utlity类,以便代码在不同的类之间更具可重用性

您还可以使用一些特性,如Java7或Java8

PrimeNumbers.java


这是个好主意更准确地说,是什么阻止了你?请告诉我们你的尝试和/或你认为它可以如何工作的简单描述。除此之外,请看一看Java代码惯例,这些惯例不鼓励以大写字符开头的方法名,例如List Calculate。我不知道什么类应该扩展另一个类,如何将GUI类中设置的参数x设置为在算法类中工作,就像我看到的3img一样uploaded@TudorVelcescu:为什么希望这些类中的任何一个相互扩展。在这种情况下,这完全没有意义。我建议您将问题转移到codereview,正如@JordiCastilla所说:谢谢您的精彩解释!
Writer writer = new Writer();
writer.write(list);
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);
    }
}
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;
    }
}
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();
        }
    }
}