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