Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Покритикуйте решение=)


Автор: V0R0N91 23.2.2012, 21:25
Задача для первого класса, но я только учусь!! 
условие:1. 
Создайте новый класс и назовите его TemperatureConverter. 
Добавьте в него метод для преобразования температур, с такой cигнатурой: public String convertTemp(int temperature, char convertTo) 
Если аргумент convertTo равен F, то температура должна быть преобразована в Фаренгейты, если C, то в Цельсии. 
когда вы будете вызывать этот метод, поместите значение аргумента 
типа char в одинарные кавычки. 
Код

package temperatureconverter;

public class TemperatureConverter {

    public String convertTemp(int temperature, char convertTo) {
        String temperatureKelvin;
        switch (convertTo) {
            case 'C':
            case 'c':
                temperature -= 273; // преобразование в градусы  Цельсия
                break; 
            case 'F':
            case 'f':
                temperature = ((int) (temperature * 1.8) - 459); // Преобразование в  градусы Фаренгейта
                break;
            default:
                System.out.println("Error");
        }
        temperatureKelvin = "Temperature is " + temperature;
        return temperatureKelvin;
    }

    public static void main(String[] args) {
        TemperatureConverter t = new TemperatureConverter();
        System.out.println("" + t.convertTemp(300, 'c'));



    }
}



Плз покритикуйте !!!! Что так а что не так , я просто хочу с самого начала писать более менее грамотный код=) 
P S Всем спасибо!

Автор: V0R0N91 23.2.2012, 21:41
Сори не тот код : 
Код

package temperatureconverter;

public class TemperatureConverter {

    public String convertTemp(int temperature, char convertTo) {
        String temperatureKelvin;
        switch (convertTo) {
            case 'C':
            case 'c':
                temperature -= 273; // преобразование в градусы  Цельсия
                break; 
            case 'F':
            case 'f':
                temperature = ((int) (temperature * 1.8) - 459); // Преобразование в  градусы Фаренгейта
                break;
            default:
                System.out.println("Error");
        }
        temperatureKelvin = "Temperature is " + temperature;
        //return temperatureKelvin;
        System.out.println( temperatureKelvin);
        return temperatureKelvin;
    }

    public static void main(String[] args) {
        TemperatureConverter t = new TemperatureConverter();
         t.convertTemp(300, 'c');



    }
}


Автор: Pawl 23.2.2012, 23:44
Цитата(V0R0N91 @  23.2.2012,  21:41 Найти цитируемый пост)
Сори не тот код

что-то я особой разницы в коде не заметил, хотя не присматривался smile .
ИМХО, написано норм, только можно бы вместо банального
Код

System.out.println("Error");

сгенерировать какой-нибудь эксэпшен.

Автор: 4epT 24.2.2012, 11:32
1) не помешали бы скобки... если код в case вырастет, будет сложно читать.
2) convertTo можно изначально делать toLowerCase и писать только одну проверку.

Автор: dorogoyIV 24.2.2012, 14:33
блин, не смог удержаться...

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

Автор: Royan 27.2.2012, 15:31
Ну чтобы не палиться, что вы только начали
Цитата(V0R0N91 @  23.2.2012,  18:41 Найти цитируемый пост)
package temperatureconverter;

http://www.oracle.com/technetwork/java/javase/documentation/codeconventions-141855.html#277

Автор: Pretorian 28.2.2012, 19:22
Цитата(Royan @ 27.2.2012,  17:31)
Ну чтобы не палиться, что вы только начали
Цитата(V0R0N91 @  23.2.2012,  18:41 Найти цитируемый пост)
package temperatureconverter;

http://www.oracle.com/technetwork/java/javase/documentation/codeconventions-141855.html#277

А к чему это?

Автор: chupaYchups 29.2.2012, 12:10
выбрасывай IllegalArgumentException в случае кривого символа, Сharacter.toUpperCase() перед свитчом
опять же странный какой то метод - принимает целочисленную температуру - а возвращает строковую
public int convertTemp(int temperature, char convertTo) - было бы логичнее для метода с названием конверт,
также я бы зафигачил внутренний енум - но это моя слабость - дело то хозяйское) 

Автор: carper 1.3.2012, 09:42
V0R0N91, 
Ну, если уж учиться ...

Что сделал бы я:
1. Метод "должен" быть static final. 

2. Название пакета не должно совпадать с названием класса. Ну некрасиво это. И, вообще, посмотрите как принято называть пакеты.

3.  char convertTo некрасиво ужасно, лучше ENUM, но хотя бы делайте перед сравнением приведение к одному регистру.

4.  Метод должен преобразовывать, а не печатать, или что-то там округлять. 
Поэтому возвращайте double, пользователь сам решит, что с этим делать.

5. System.out.println("Error"); - еще раз, дело метода преобразовывать, а не печатать, если преобразовать не получается, то
надо выбросить ошибку, а не писать в консоль "караул".

6. Где описание метода? 
Как по мне - уже одно это говорит о неграмотном коде.
Может название метода и самодокументированное, но вот что делает, например, char convertTo ? понимает только автор метода и то только первую неделю ...
А еще, например, как мне догадаться, что метод не проверяет переданные числа на допустимость и может мне вернуть -456С?
Интуитивно?

7. 0K = −273.15 °C, а не -273!

8.  "Если аргумент convertTo равен F, то температура должна быть преобразована в Фаренгейты, если C, то в Цельсии."

Какая прелесть! Т.е. во что температура должна быть преобразована догадались, а из чего нет?
Т.е. сижу это я в интернет, читаю книжку, ну того же Дюма, а он там, вот сюрприз-то температуру в Реомюрах дает.
Ввожу я ее в ваш калькулятор и получаю "хрень разноцветная 1 штука"! 

Кстати, сюрприз! - Вики знает еще минимум 4 шкалы : Ранкин    Делиль    Ньютон    Рёмер!
Что это за штуки я, кстати, сам не знаю, но есть же smile

Ага, я уже догадался, как хочется сказать, что для учебной задачи это не важно, так обломитесь! smile даже для учебной задачи это самое важное, надо " с пеленок" понимать, что писать хрень нельзя!
Медленный код можно, не очень грамотный технически можно, не документированный можно, а вот имеющий на выходе "хрень зеленая 1 штука" нельзя!

9. Вообще-то, в нашем учебном примере хорошо бы перейти к замене switch на полиморфизм, интерфейсы, фабрики и т.п. (всякие там паттерны типа стратегии).
Т.е. есть куда расти с этим же самым примером от 1 до 10 класса! smile


Автор: Сонечка 1.3.2012, 15:37
Мне вот подумалось, что будет, если я выложу свой любимый из текущего проекта класс, который занимает, прости господи, 6000 строк, если на такую милую задачку 9 пунктов нашлось smile 

Автор: LSD 1.3.2012, 16:08
Цитата(Сонечка @  1.3.2012,  16:37 Найти цитируемый пост)
Мне вот подумалось, что будет, если я выложу свой любимый из текущего проекта класс, который занимает, прости господи, 6000 строк, если на такую милую задачку 9 пунктов нашлось

Можешь ничего не выкладывать, 6000 строк это уже приговор - все переписать. smile 

Автор: Сонечка 1.3.2012, 16:30
Цитата(LSD @ 1.3.2012,  16:08)
Цитата(Сонечка @  1.3.2012,  16:37 Найти цитируемый пост)
Мне вот подумалось, что будет, если я выложу свой любимый из текущего проекта класс, который занимает, прости господи, 6000 строк, если на такую милую задачку 9 пунктов нашлось

Можешь ничего не выкладывать, 6000 строк это уже приговор - все переписать. smile

Дааа, больше стараюсь такую абракадабру не писать) Остальное пока за 600 строк не вылазило smile  Ну кто ж мне, нубу, сказал, что не стоит так делать... Теперь, когда у меня 30+ классов развелось, задумалась еще о пользе пакетов) А еще книжку почитала "идеальный код", и вообще все захотелось выкинуть и переписать. А нельзя smile

Добавлено через 3 минуты и 3 секунды
Пересчитала. 50+ классов smile Пакеты определенно полезны(

Автор: baldina 1.3.2012, 16:49
Цитата(Сонечка @  1.3.2012,  16:30 Найти цитируемый пост)
Ну кто ж мне, нубу, сказал, что не стоит так делать

афторы книжек разных

Цитата(Сонечка @  1.3.2012,  16:30 Найти цитируемый пост)
А еще книжку почитала "идеальный код"

во-во. только она не единственная. нужна архитектура на всех уровнях: приложение, модуль, класс, функция. тогда программа будет короче, понятнее, и, возможно, быстрее.

Автор: k0rvin 1.3.2012, 22:18
Цитата(carper @ 1.3.2012,  09:42)
9. Вообще-то, в нашем учебном примере хорошо бы перейти к замене switch на полиморфизм, интерфейсы, фабрики и т.п. (всякие там паттерны типа стратегии).

Ну вот, наблюдаем ООП головного мозга.

Автор: 502 1.3.2012, 22:26
Код

String temperatureKelvin;
// ...
temperatureKelvin = "Temperature is " + temperature;

почему не
Код

String temperatureKelvin = "Temperature is " + temperature;

?
Цитата(k0rvin @  1.3.2012,  22:18 Найти цитируемый пост)
Ну вот, наблюдаем ООП головного мозга.

+1

Автор: carper 2.3.2012, 08:28
Цитата(k0rvin @  1.3.2012,  22:18 Найти цитируемый пост)
Ну вот, наблюдаем ООП головного мозга.


Ага.  smile 


Но для учебы таки самое оно, чтобы потом не получить СДВГ (Синдром дефицита внимания и гиперактивности), которым страдают 99% новичков при увеличении проекта чуть выше уровня "свой калькулятор калорий".

Автор: Сонечка 2.3.2012, 10:28
Цитата(baldina @ 1.3.2012,  16:49)
Цитата(Сонечка @  1.3.2012,  16:30 Найти цитируемый пост)
Ну кто ж мне, нубу, сказал, что не стоит так делать

афторы книжек разных

Цитата(Сонечка @  1.3.2012,  16:30 Найти цитируемый пост)
А еще книжку почитала "идеальный код"

во-во. только она не единственная. нужна архитектура на всех уровнях: приложение, модуль, класс, функция. тогда программа будет короче, понятнее, и, возможно, быстрее.

Время на все нужно. Прочитать, осознать. А еще за половину скаченных книг зазря берешься, ибо бесполезные. Зато время тратишь. Напишите мне, что еще читать, что прям в корне изменит мое мировоззрение и сделает мой код простым и функциональным smile 

Автор: k0rvin 2.3.2012, 11:13
Цитата(Сонечка @ 2.3.2012,  10:28)
Напишите мне, что еще читать, что прям в корне изменит мое мировоззрение и сделает мой код простым и функциональным smile

"Структура и интерпретация компьютерных программ"

Автор: Сонечка 2.3.2012, 11:39
Цитата(k0rvin @ 2.3.2012,  11:13)
"Структура и интерпретация компьютерных программ"

Вот спасибо) За одно еще видео какой-то лекции из MITa нашла по этой теме=)  smile 

Автор: k0rvin 2.3.2012, 12:45
Цитата(Сонечка @ 2.3.2012,  11:39)
Вот спасибо) За одно еще видео какой-то лекции из MITa нашла по этой теме=)  smile

Не "какой-то лекции по этой теме", а лекции по этому курсу и есть, они так и называются =) Видеоверсия немного отличается от книжной, но совсем чуть-чуть =)

Автор: Сонечка 2.3.2012, 14:18
Цитата(k0rvin @ 2.3.2012,  12:45)
Не "какой-то лекции по этой теме", а лекции по этому курсу и есть, они так и называются =) Видеоверсия немного отличается от книжной, но совсем чуть-чуть =)

^^

Автор: baldina 5.3.2012, 18:06
Читайте Г.Буча (ООП с примерами применения).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)