Hallo , ich habe folgendes Problem : ich habe für die Schule ein programm geschrieben welches überprüfen soll ob eine eingegebene zahl eine primzahl ist, das funktioniert, nun habe ich das programm um die funktion erweitert dass es mir die primzahlen zwischen 2 zahlen berechnen soll ( zb 0 und 10 = 2,3,5,7), das funktioniert auch, nur scheitert es am detail, und zwar will ich mit den aktuellen bestand an primzahlen angucken -> wenn das programm die zahl 3 in diesem beispiel überprüft soll dort stehen 1 von 2 zahlen [0 und 1] sind primzahlen) ... das funktioniert bedingt -> am ende der gesammten operationen steht das finale ergebnis(auch richtig) auf dem label, nur möchte ich, dass man quasi live verfolgen kann bei welcher zahl sich der computer ungefähr befindet, also dass das label nach jeder rechenoperation erneuert wird ...
Quellcode :
Quellcode :
Java:
import java.awt.Color;
import java.awt.List;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
public class Prime extends JFrame {
JPanel colorPanel;
JTextField input, start, end;
JButton ok;
JLabel total;
List list;
JCheckBox cBox;
public Prime() {
setTitle("Prime");
setSize(500,800);
setVisible(true);
setLayout(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
setLocation(100,100);
colorPanel = new JPanel();
input = new JTextField();
start = new JTextField();
end = new JTextField();
list = new List();
cBox = new JCheckBox("numbers between");
ok = new JButton("Calculate!");
total = new JLabel("total numbers :");
total.setBounds(10, 0, 480, 50);
input.setBounds(10,50,200,50);
cBox.setBounds(330,50,150,50);
start.setBounds(10,110,150,50);
end.setBounds(170, 110, 150, 50);
ok.setBounds(330, 110, 100, 50);
list.setBounds(10, 170, 480, 595);
colorPanel.setBounds(220,50,100,50);
colorPanel.setBackground(Color.gray);
start.setEditable(false);
end.setEditable(false);
ok.setEnabled(false);
ok.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int pr = 0, nr = 0;
long st = Long.parseLong(start.getText());
long en = Long.parseLong(end.getText());
if(st < en) {
list.removeAll();
for(; st <= en ; st ++) {
if(isPrime(st)) {
list.add(Long.toString(st));
pr ++;
}
nr ++;
total.setText("total primes :" + pr + " of " + nr +" numbers");
}
}
}
});
cBox.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
if(cBox.isSelected()) {
start.setEditable(true);
end.setEditable(true);
ok.setEnabled(true);
}
else {
start.setEditable(false);
end.setEditable(false);
ok.setEnabled(false);
}
}
});
input.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void removeUpdate(DocumentEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void insertUpdate(DocumentEvent arg0) {
if(isPrime(Float.parseFloat(input.getText()))) {
colorPanel.setBackground(Color.green);
}
else
colorPanel.setBackground(Color.red);
}
@Override
public void changedUpdate(DocumentEvent arg0) {
}
});
add(cBox);
add(list);
add(start);
add(end);
add(input);
add(colorPanel);
add(ok);
add(total);
repaint();
}
public void setLabelText(String s) {
total.setText(s);
}
public boolean isPrime(float p) {
if(p > 1) {
for(long i = 2; i != p;i++) {
if(p % i == 0)
return false;
}
return true;
}
else
return false;
}
public static void main(String[] args) {
new Prime();
}
}
Zuletzt bearbeitet: