Разбор примитивных типов с использованием java.util.Scanner - PullRequest
1 голос
/ 29 мая 2010

Я новичок в Java, так что простите за вопрос noob.

Я создал свинг-приложение, в котором в JTextFields есть три входные строки: loanAmount, InterestRate и loanYears и одна кнопка отправки с EventAction.

Я пытаюсь использовать java.util.Scanner для анализа ввода примитивных типов, которые я могу использовать в вычислениях.

Я получаю сообщение об ошибке в NetBeans, указывающее, что мои переменные не распознаются? я не должен звонить System.in?

private void submitButtonActionPerformed(java.awt.event.ActionEvent evt) {
    Scanner keyInput = new Scanner(System.in);
    while (true)
        try{
            double amount = keyInput.nextDouble(loanAmount.getText());
            double interest = keyInput.nextDouble(interestRate.getText());
            int years = keyInput.nextInt(loanYears.getText());

        } catch (NumberFormatException nfe){

        }
}

Ответы [ 3 ]

2 голосов
/ 30 мая 2010

Не беспокойтесь о том, чтобы задавать более простые вопросы, мы получаем их постоянно. Если бы не простые вопросы, я бы никогда ничего не ответил.

Я сразу вижу три проблемы с вашим кодом:

  1. Вы ловите исключение, но затем отбрасываете его. Есть моменты, когда вы не хотите предпринимать никаких действий в ответ на исключение, с точки зрения пользователя, но как программист вы захотите знать. Попробуйте сказать nfe.printStackTrace(System.err);

  2. Сканер не то, что вы ищете. Double.valueOf (..) будет более прямым.

  3. Теперь, что касается вашей реальной проблемы: Ваши три переменные выходят за пределы области в конце блока try. Попробуйте объявить их там, где вы объявили KeyInput.

private void submitButtonActionPerformed(java.awt.event.ActionEvent evt) {                                             
    double amount, interest;
    int years;
    while (true) {
        try {
            amount = Double.valueOf(loanAmount.getText());
            interest = Double.valueOf(interestRate.getText());
            years = Integer.valueOf(loanYears.getText());

        } catch (NumberFormatException nfe){
            if (DEBUG) nfe.printStackTrace(System.err);
            return;
        }
    }
    // Your values of amount, interest and years will be available here.
    // Past this last curley brace, however, they will go out of scope.
    // If you want them to stick around for as long as the new object,
    // define them as class fields.
}
0 голосов
/ 29 мая 2010

Нет, вы не должны;) Сканер считывает данные из потока, а System.in - это поток, который читает байты из консоли, а не из компонентов Swing.

Идея состоит в том, чтобы проанализировать строку в текстовом поле:

private void submitButtonActionPerformed(java.awt.event.ActionEvent evt) {                                             
    try {
       double amount = Double.parseDouble(loanAmount.getText());
       double interest = Double.parseDouble(interestRate.getText());
       int years = Integer.parseInt(loanYears.getText());
     } catch (NumberFormatException nfe){

     }
}
0 голосов
/ 29 мая 2010

Сканер для командной строки. Вам нужно получить доступ к полю ввода и получить его значение и превратить его в int.

Попробуйте это так:

private void submitButtonActionPerformed(java.awt.event.ActionEvent evt) {                                             
        double amount = Double.valueof(loanAmount.getText());
        double interest = Double.valueof(interestRate.getText());
        int years = Double.valueof(loanYears.getText());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...