2014-09-10 4 views
0

내 코드는 사용자가 이진 문자열 만 입력하도록합니다. 올바른 이진수 (1, 0)를 입력하면 모든 것이 올바르게 진행됩니다. 그러나 잘못된 숫자 (0 또는 1 이외의 알파벳 또는 숫자)를 입력하면 JOptionPane.ShowMessageDialog가 오류 메시지를 표시하고 "확인"또는 "교차"단추를 클릭하면 다시 나타납니다. 그래서 응용 프로그램을 닫으려면 프로세스 관리자를 사용하여 "java.exe"를 종료해야합니다.JOptionPane.showMessageDialog가 다시 나타납니다.

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.util.*; 

class Bn extends JFrame { 
    private JLabel l1; 
    private JLabel l2; 
    private JLabel l3; 

    private JTextField tf; 

    private JButton oc; 
    private JButton hd; 
    private JButton dc; 

public Bn() { 
    setTitle("Binary Conversion"); 
    setSize(350 , 190); 
    setResizable(false); 
    setLocation(720 , 200); 
    //setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setLayout(new FlowLayout(FlowLayout.CENTER, 25, 10)); 

    l1 = new JLabel(">>>>>>>>BINARY CONVERSION<<<<<<<<"); 
    l2 = new JLabel("Enter The Number:"); 
    l3 = new JLabel("         Convert to:         "); 

    tf = new JTextField(25); 

    oc = new JButton("Octal"); 
    hd = new JButton("Hexa Decimal"); 
    dc = new JButton("Decimal"); 

    add(l1); // Binary conversion 
    add(l2); // Enter The Number 

    add(tf); // Text Field 

    add(l3); // Conver to 


    add(oc); // Octal 
    add(hd); // Hexa Decimal 
    add(dc); // Decimal 

    oc.addActionListener(new cvr()); 
    hd.addActionListener(new cvr()); 
    dc.addActionListener(new cvr()); 

    setVisible(true); 
} 

void res() 
{ 
    int b = 0; 
    String num = tf.getText(); 
    int i , l; 
    l = num.length(); 
    char ch; 

    do 
    { 
     for (i=0 ; i<l ; i++) 
     { 
      b = 0; 
      ch = num.charAt(i); 
      if (Character.isDigit(ch) && (ch == 48 || ch == 49)) 
       b=1; 
      else 
      { 
       JOptionPane.showMessageDialog(null, "Please enter a binary number (1 , 0)"); 
      } 
     } 
    } 
    while(b != 1); 
} 


void occ() 
{ 
    res(); 

    String num = tf.getText(); 

    long dec = Long.parseLong(num,2); 

    String oct = Long.toOctalString(dec); 

    JOptionPane.showMessageDialog(null, "Octal equivalent is: "+ oct); 
} 

void hdc() 
{ 
    res(); 

    String num = tf.getText(); 

    long dec = Integer.parseInt(num,2); 

    String hex = Long.toHexString(dec); 

    JOptionPane.showMessageDialog(null, "Hexa Decimal equivalent is: "+ hex); 

} 

void dcc() 
{ 
    res(); 

    String num = tf.getText(); 
    long decimal = 0, temp, i = 0; 
    temp = Long.parseLong(num); 
    while (temp != 0) { 
     long r = temp % 10; 
     long value = r * (int)Math.pow(2, i); 
     i++; 
     decimal = decimal + value; 
     temp /= 10; 
    } 
    JOptionPane.showMessageDialog(null, "Decimal equivalent is: "+ decimal); 
} 


private class cvr implements ActionListener 
{ 
    public void actionPerformed(ActionEvent e) 
    { 
     if (e.getSource() == oc) 
     { 
      occ(); 
     } 

     if (e.getSource() == hd) 
     { 
      hdc(); 
     } 

     if (e.getSource() == dc) 
     { 
      dcc(); 
     } 
    } 
} 

public static void main(String args[]) 
{ 
    Bn obj = new Bn(); 
} 
} 

위한 JOptionPane의 코드가 void res() 방법에 있습니다

여기에 내 응용 프로그램의 전체 코드입니다. 입력 값을 다시 입력 할 수 있도록이 대화 상자 창을 닫을 수 있습니까?

+0

이것은 문제가된다 –

+0

공극 RES() { INT B = 0이고; String num = tf.getText(); int i, l; l = num.length(); char ch; do { for (i = 0; i <1; i ++) { b = 0; ch = num.charAt (i); (Character.isDigit (ch) && (ch == 48 || ch == 49)) b = 1; else { JOptionPane.showMessageDialog (null, "이진수 (1, 0)을 입력하십시오"); } } } while (b! = 1); } –

답변

0

계십니까 제거 {} while 루프

do 
{ 
    for (i=0 ; i < l ; i++) 
    { 
     b = 0; 
     ch = num.charAt(i); 
     if (Character.isDigit(ch) && (ch == 48 || ch == 49)) 
      b=1; 
     else 
     { 
      JOptionPane.showMessageDialog(null, "Please enter a binary number (1 , 0)"); 
     } 
    } 
} 
while(b != 1); 
+0

내가 루프를 제거한 다음 옵션 창이 표시되면 잘못된 숫자를 입력 한 횟수가 표시됩니다. ( –

+0

) doMove를 삭제하고 showMessageDialog 뒤에 "break;"를 추가합니다. – ControlAltDel

+0

휴식 시간을 추가하면 어떻게됩니까? while do while while ?? –

관련 문제