0

だから私はこれを理解しようとしてきましたが、役に立ちませんでした。NumberFormatException と ArrayIndexOutOfBoundsException の 2 つの例外がありながら、JTextField を int 配列に変換する必要があります。それを変換する方法を見つけることができましたが、文字を入力しても 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");
    }

個人的には、JTextField を char に変換するため、NumberFormatException をスローしていないと思いますが、完全に間違っている可能性があります。どんな助けでも大歓迎です。

編集: 私の意見では、プログラムは少し長いので、プログラムの一部のみを含めました。配列はこの前に初期化されます。プログラムのこの部分の最終的な目標は、文字が入力された場合、または 10 個の数字を超えた場合に例外をスローしながら、ユーザーに 10 個の数字の制限を入力させることです。例外を使用するのはこれが初めてで、まだ比較的慣れていないため、間違いがあった場合はご容赦ください。

4

2 に答える 2

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() を使用する必要があります

于 2012-06-17T20:20:54.297 に答える
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);
        }
    }
}
于 2012-06-17T20:41:30.017 に答える