Основная проблема имперской конверсии - PullRequest
4 голосов
/ 24 января 2010

Кодирование инструмента расчета для моего Android. Один из входов - это расстояние в футах и ​​дюймах.

У меня есть два входа (input3 и input4) для футов и дюймов соответственно. В моих вычислениях я пытаюсь преобразовать эти два входа в десятичное число, которое будет использоваться в остальной части уравнения. Вот часть моего кода, которая делает это:

private void doCalculation() { 
    // Get entered input value 
    String strValue3 = input3.getText().toString(); 
    String strValue4 = input4.getText().toString();

    // Perform a hard-coded calculation 
    double imperial1 = (Integer.parseInt(strValue3) + (Integer.parseInt(strValue4) / 12));

    // Update the UI with the result to test if calc worked 
    output2.setText("Test: "+ imperial1); 
}

Мои тестовые значения - 4 фута 6 дюймов. 4 хорошо, но 6 дюймов по умолчанию 0, когда он делится на 12. Таким образом, мой результат 4,0, я попытался сократить расчет просто, чтобы операция деления, и результат 0,0

Что я делаю не так? (к вашему сведению: я впервые использую Java)

Ответы [ 3 ]

8 голосов
/ 24 января 2010

Ваши типы не правы. Вы анализируете их как целые, когда они действительно должны быть двойными.

Попытка:

double imperial1 = Double.parseDouble(strValue3) + 
    (Double.parseDouble(strValue4) / 12.0);
1 голос
/ 24 января 2010

Ответ Эли будет работать нормально. Я просто отправляю ответ на ваш вопрос (комментарий) на ответ Илии.

Can you explain what a try-catch block is?

Сначала вы должны понять, что такое исключение. Исключением является событие, которое происходит во время выполнения вашей программы и нарушает нормальный поток инструкций программы.

В Java есть 3 вида исключений:

  • Исключения времени выполнения: Исключение называется исключением времени выполнения, если его тип данных java.lang.RuntimeException или его подкласс.

  • Проверенные исключения: Исключение называется проверенным исключением, если его тип данных является дочерним классом java.lang.Exception, но не дочерним классом RuntimeException.

  • Ошибки: Исключение называется ошибкой, если его тип данных является дочерним классом java.lang.Error. Ошибка связана с проблемами, которые возникают за пределами вашего приложения и обычно не пытаются исправить ошибки.

Для более подробного описания исключений читайте this .

Чтобы поймать и обработать эти исключения, вы используете блоки try-catch. Например, вы используете функцию Double.parseDouble. Если параметр в этой функции не является допустимым числом, например, если пользователь вводит строку « NotANumber », вы пытаетесь преобразовать его в удвоенное значение, тогда NumberFormatException будет выброшено Double.parseDouble. Если вы не обработаете эту ошибку, ваша программа неожиданно прекратит работу.

Итак, вы должны написать что-то вроде следующего (включая нужную вам функцию положительных чисел):

double imperial1 = 0.0;
try {
    double firstNumber = Double.parseDouble(strValue3);
    double secondNumber = Double.parseDouble(strValue4);

    if(firstNumber < 0 || secondNumber < 0)
        throw new NumberFormatException("numbers must be positive.");

    imperial1 = firstNumber + secondNumber / 12.0;
} catch(NumberFormatException ex) {
    // Handle the exception maybe by printing a message to the user that his inputs
    // weren't valid numbers. 
}
1 голос
/ 24 января 2010

... что сказал Илай.

Я просто хотел спросить, почему ваши переменные называются strValue3 и strValue4. Я предполагаю, что это генерируется, но вы должны привыкнуть называть вещи хорошо. Я мог бы пойти с "ноги" и "дюймы":)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...