2012-06-17 3 views
0

그래서 이것을 알아 내려고 노력했지만 아무 소용이 없습니다. NumberFormatException 및 ArrayIndexOutOfBoundsException의 두 가지 예외가있는 동안 JTextField를 int 배열로 변환해야합니다. 나는 그것을 변환 할 수있는 방법을 찾을 수 있었지만 글자를 입력 할 때 NumberFormatException을 던지지 않을 것이다.JTextField를 예외가있는 int 배열로 변환

try { 
    int j=0; 
    String str = "" + numbersField.getText(); 
    char digit[] = str.toCharArray(); 
     for (int i=0; i<digit.length; i++) { 
      if (Character.isDigit(digit[i])) { 
       array[j]=Character.getNumericValue(digit[i]); 
       System.out.print(array[j] + " "); //Checking if it works 
       ++j; 
      } 
     } 
    } catch (NumberFormatException e1) { 
     System.err.println("NumberFormatException: Array can only hold integers"); 

    } catch (ArrayIndexOutOfBoundsException e1) { 
       System.err.println("ArrayIndexOutOfBoundsException: Array can only hold up to 10 elements"); 
    } 

는 개인적으로, 나는 그것이 숯불에 JTextField를 변환하기 때문에이 NumberFormatException이 던지는 아니에요 생각하지만, 나는 완전히 잘못 될 수 있습니다. 어떤 도움을 주셔서 감사합니다.

편집 : 내 의견으로는 다소 길기 때문에 프로그램의 일부만 포함 시켰습니다. 배열은 이것보다 먼저 초기화됩니다. 프로그램의이 부분의 궁극적 인 목표는 글자가 입력되거나 숫자가 10 개를 초과하는 경우 예외를 던지면서 사용자가 10 개의 숫자를 입력하도록하는 것입니다. 이것은 처음으로 예외를 사용하기 때문에 아직 비교적 익숙하지 않으므로 실수를 저를 용서해주십시오.

+0

이 곳을'배열 []'초기화합니까? – alaster

+0

얼마나 많은 자릿수를 읽고 싶습니까? 어쩌면 모든 텍스트를 하나의 큰 숫자로 읽은 다음 숫자 배열로 변환하는 것이 더 좋을까요? 모든 문자가 숫자인지 확인하기 때문에 결코 NumberFormatException을 가지지 않을 것입니다. – alaster

+0

물론 NFE가 throw되지 않습니다. if 블록은 숫자가 아닌 문자를 분석하지 못하며 NumberFormatException을 구문 분석하지 않습니다. 던지는 방법. –

답변

2

전체 텍스트의 숫자 만 확인한 다음 텍스트를 int으로 변환 한 다음 모든 숫자를 배열로 바꿀 수 있습니다.

대안을 시도해보십시오

String str = numbersField.getText(); 

try { 
    int value = Integer.parseInt(str); 

    int[] array = new int[str.lenght - 1]; 
    j = array.length - 1; 
    while (value > 0) { 
     array[j] = value % 10; 
     value /= 10; 
     --j; 
    } 

} catch (NumberFormatException ex) { 
    System.out.println("Enter only digits!") 
} 

UPD : 또한 당신은 value < 0 있는지 확인하고 (당신이 마이너스 기호에 동의하지 않을 경우) 오류를 보여

을 int로 변환하기 전에 str.trim()를 사용합니다
+0

감사! NumberFormatException을 던졌습니다. 그러나 이제는 10 개의 요소에서 ArrayIndexOutOfBoundsException을 throw 할 때 10을 허용하고 11 후에 던져야합니다. 나는 계속 살펴볼 것이다. 다시 한 번 감사드립니다! – user1462300

1

흠 아니라 어쩌면이 도움이 될, 아마 가장 효율적인하지만 작업 않습니다

import java.awt.BorderLayout; 
import java.awt.EventQueue; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JOptionPane; 
import javax.swing.JTextField; 

public class JTextFieldIntToArrayValidation extends JFrame { 

    private int[] integerArray; 
    private JButton button; 
    private JTextField tf; 

    public JTextFieldIntToArrayValidation() { 
     createAndShowUI(); 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       JTextFieldIntToArrayValidation test = new JTextFieldIntToArrayValidation(); 
       test.setVisible(true); 
      } 
     }); 
    } 

    private void createAndShowUI() { 
     setTitle("Converting JTextField to an int array with exceptions"); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setLocationRelativeTo(null); 
     addComponentsToPane(); 
     addListeners(); 
     pack(); 
     tf.grabFocus(); 
    } 

    private void addComponentsToPane() { 
     button = new JButton("Convert JTextfield to array"); 
     tf = new JTextField(10); 
     getContentPane().add(tf, BorderLayout.EAST); 
     getContentPane().add(button, BorderLayout.WEST); 
    } 

    private void addListeners() { 
     button.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent ae) { 
       String tmp = tf.getText(); 
       char[] chars = tmp.toCharArray(); 
       integerArray = new int[chars.length]; 

       try { 

        if (integerArray.length > 10) {//if digits entered are greater then 10. This however only allows for single digits!!! 
         throw new ArrayIndexOutOfBoundsException("Array cannot be larger then 10: " + integerArray.length); 
        } 
        for (int i = 0; i < tmp.length(); i++) { 
         if (!Character.isLetter(chars[i])) {//if its not a letter 
          integerArray[i] = Integer.parseInt(chars[i] + "");//stops java handling chars as ints 
         } else {//its a letter 
          throw new NumberFormatException("Only valid integers must be entered no letters: " + chars[i]); 
         } 
        } 
        printArray(); 
       } catch (NumberFormatException | ArrayIndexOutOfBoundsException ex) { 
        JOptionPane.showMessageDialog(getContentPane(), ex.getMessage()); 
       } 
      } 
     }); 
    } 

    private void printArray() { 
     for (int i : integerArray) { 
      System.out.println(i); 
     } 
    } 
} 
+0

와우, 그때는 더 기대했지만 감사했습니다! 내 프로그램에 actionPerformed 섹션을 통합 할 수 있었고 매력처럼 작동했습니다! 나는 그런 예외를 사용할 수 있다는 것을 몰랐고, 교수는 결코 넘어 가지 않았습니다. 감사! – user1462300