Ich versuche einen JButton auf einem JPanel zu erstellen, der, wenn er angeklickt wird, die Hailstone-Nummer erzeugt (wenn die Zahl gerade geteilt ist durch zwei; wenn die Zahl ungerade ist, multipliziere mit 3 und füge dann einen hinzu). Wenn ich jedoch auf meine JButton klicke, bleibt das Programm stehen und es wird keine Nummer ausgegeben. Warum passiert dies?Warum funktioniert dieser Hagelsteinnummernproduzent nicht?
Hier ist mein Code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Panel03 extends JPanel {
private JLabel label;
private JButton button;
private JTextField box;
public Panel03()
{
box = new JTextField("0", 10);
box.setForeground(Color.black);
box.setHorizontalAlignment(SwingConstants.RIGHT);
add(box);
label = new JLabel();
label.setFont(new Font("Serif", Font.BOLD, 20));
label.setForeground(Color.blue);
add(label);
button = new JButton("Next");
button.addActionListener(new Listener());
add(button);
}
private class Listener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
String s = box.getText();
int a = Integer.parseInt(s);
int b = a;
do {
if(a%2 == 0){b/=2.0;}
else{a=((3*b)+1);}
label.setText(Integer.toString(b));
}
while(b!= 4||b!= 2||b!= 1);
}
}
}
Jede bestehende Nummer ist entweder nicht mehr als 4 oder nicht 2. Vielleicht meintest du '&&' anstelle von '||'. – shmosel
Sie verwenden kein 'a', nachdem Sie den Wert innerhalb der Schleife festgelegt haben. –