将JTextField转换为具有异常的int数组

时间:2012-06-17 20:07:21

标签: java arrays eclipse exception jtextfield

所以我一直试图解决这个问题,但无济于事。我必须将JTextField转换为int数组,同时有两个异常,NumberFormatException和ArrayIndexOutOfBoundsException。我能够找到一个转换它的方法,但是当我输入字母时它不会抛出NumberFormatException。

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

就个人而言,我认为它不会抛出NumberFormatException,因为它将JTextField转换为char,但我可能完全错了。任何帮助表示赞赏。

编辑:我只包括该计划的一部分,因为在我看来它有点冗长。在此之前,数组已初始化。该部分程序的最终目标是让用户输入10个数字的限制,同时在输入字母或超过10个数字时抛出异常。这是我第一次使用例外,所以我还是比较新的,所以请原谅我做过的任何错误。

2 个答案:

答案 0 :(得分: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()

答案 1 :(得分: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);
        }
    }
}