2017-03-07 4 views
0

私はJPanel上でJButtonを作成しようとしています。これをクリックすると、雹の番号が生成されます(番号が2で偶数であれば、奇数の場合は3を掛けて1を加えます)。しかし、私のJButtonをクリックすると、プログラムはフリーズし、番号は出力されません。なぜこうなった?ここでなぜこの雹の番号の生産者は機能しませんか?

が私のコードです:

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); 
 
    } 
 
} 
 
}

+0

:私はあなたがここでやろうとしているかわからないが、私はあなたのループ終了ロジックがあるべき容疑者との代わりに、または、aとb = 0可能性をキャッチする必要があります2.あなたが '||'の代わりに '&&'を意味したのかもしれません。 – shmosel

+0

ループの中で値を設定した後、 'a'を使用していません。 –

答えて

0

プログラムがフリーズするたびに、無限ループが第一容疑者です。この場合、この行をループに追加する。

System.out.printf("* a=%d b=%d\n",a,b); 

は、a = 0およびb = 0を永久に示す。 aはゼロであり、%2 = 0であり、b/= 2は依然としてゼロであるため、変数は決して変化しません。 a = 1から始まっても、a = 4、b = 0で立ち往生する。実際に入力した数字の場合、bはゼロになり、ループは止まってしまいます。すべての既存の番号がない4かのどちらかである

while (b!=4 && b!=2 && b!=1 && b!=0); 
関連する問題