парсинг типов примитивов с помощью java.util. Сканер

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

Я создал приложение колебания, которое в основном имеет три входных строки в JTextFields: loanAmount, процентная ставка и 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){

        }
}
1
задан Durandal 24 February 2014 в 05:24
поделиться

3 ответа

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

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

  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.
}
2
ответ дан 3 September 2019 в 00:14
поделиться

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

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

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
ответ дан 3 September 2019 в 00:14
поделиться

Scanner предназначен для командной строки. Вам нужно получить доступ к полю ввода, получить его значение и превратить его в 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());
}
0
ответ дан 3 September 2019 в 00:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: