Java. Как мне вернуть исключение, если пользователь вводит недопустимый ввод?

Я полный новичок, когда дело доходит до кодирования. В настоящее время я посещаю уроки программирования в местном колледже. Нам дали задание создать программу, вычисляющую ИМТ (индекс массы тела) пользователя.

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

В котором отображать любые недопустимые входы следующих

  • Рост не менее 48 дюймов
  • высота не более 80 дюймов
  • вес не менее 75 фунтов
  • вес не более 300 фунтов

Пример взаимодействия

Пожалуйста, введите ваш рост в дюймах: 20
извините, вы ввели недопустимый рост

Пожалуйста, введите свой рост в дюймах: 62
Пожалуйста, введите свой вес в фунтах: x
извините, вы не ввели число в фунтах


У меня есть идея, так как люди предлагают использовать оператор try, catch. Я пытался, но, похоже, разобрался.

import java.util.*;
public class BMI {

    public static void main(String[ ] arg){

        // BMI calculator 
        Scanner keyboard = new Scanner ( System.in ); 
        final double BMI_CONVERSION = 703.0; // pounds/inches to kilograms/meters for BMI calculations 

        double bodyMassIndex; 
        double height = 0; 
        double weight = 0;
        String BMICategory = "";

        // user inputs 

        // inches
        System.out.print( "What's your height in inches? "); 
        height = keyboard.nextDouble();

        // Pounds
        System.out.print( "What's you weight in pounds? "); 
        weight = keyboard.nextDouble(); 

        // Calculate BMI 
        bodyMassIndex = weight * BMI_CONVERSION / (height * height); 
        if (bodyMassIndex < 18.5) 
        { 
            BMICategory = "considered at a underweight"; 
        } 
        else if (bodyMassIndex >= 18.5 && bodyMassIndex <= 25) 
        { 
            BMICategory = "considered at a optimal weight"; 
        } 
        else 
        { 
            BMICategory = "considered overweight"; 
        } 


        // output 
        System.out.println( "Your BMI is: " + bodyMassIndex + ", You are " +     BMICategory + ".");

    }
}

person Community    schedule 25.02.2016    source источник
comment
Ну... Не используйте исключения для этой цели. Это плохой стиль.   -  person Erich Kitzmueller    schedule 26.02.2016
comment
Какая конкретно у вас трудность? В предоставленном вами коде нет операторов try/catch.   -  person jmoerdyk    schedule 26.02.2016


Ответы (3)


Вам нужно реорганизовать свою программу, если вы хотите использовать исключения. Исключение означает, что у вас будет блок try/catch вне функции, который генерирует исключение.

1) - Создать класс, в котором будут нужные поля для расчетов, и вычислить метод.

2) - Создайте класс, который будет реагировать на входной цикл, с отдельными функциями для каждой переменной. Этот метод должен вызывать исключение, если значение недействительно. Создайте мастер-функцию, которая вызовет все необходимые функции для чтения данных и закроет их в блоке try/catch. Вот так

public BMI masterFunc(){

try{


    readFirst();

    readSecond();

    //etc....
    BMI obj = new BMI();
    //set you params to new created class BMI
    //and return it from func
    return obj;

}catch(Exception e){

    return null;

 }

}

Теперь вы можете поместить его в цикл в основном, например

BMI obj = null;

while(obj == null)
    BMI obj = ReaderClass.masterFunc();

Надеюсь, я смог ответить на ваш вопрос!

person Sasha Chepurnoi    schedule 25.02.2016

Во-первых, размещать свой код и просить о помощи — это нарушение правил веб-сайта.

В любом случае, в вашем коде вам нужно зациклить свой ввод (в то время как цикл со значением, установленным как true, был бы лучшим выбором), в этом цикле вы проверяете, попадает ли ввод в ваши критерии. Если это так, то вы выходите из петли.

Таким образом, вы можете придерживаться своих критериев и получить ИМТ в конце.

P. S. Используемые здесь понятия — это зацикливание и выход из цикла, вы можете посмотреть несколько примеров в Интернете для лучшего понимания.

person Nithin Narla    schedule 25.02.2016

Взгляните на "public void functionName() throws InvalidInputException".

person Jonh Doe    schedule 25.02.2016