Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Покритикуйте решение=) 
:(
    Опции темы
V0R0N91
Дата 23.2.2012, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 27.11.2011

Репутация: нет
Всего: нет



Задача для первого класса, но я только учусь!! 
условие: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 Всем спасибо!
PM MAIL   Вверх
V0R0N91
Дата 23.2.2012, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 27.11.2011

Репутация: нет
Всего: нет



Сори не тот код : 
Код

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');



    }
}


PM MAIL   Вверх
Pawl
Дата 23.2.2012, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 649
Регистрация: 22.4.2008
Где: Витебск

Репутация: 7
Всего: 28



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

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

System.out.println("Error");

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


--------------------
В действительности всё совсем не так, как на самом деле
PM MAIL   Вверх
4epT
Дата 24.2.2012, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 784
Регистрация: 13.8.2007

Репутация: нет
Всего: 3



1) не помешали бы скобки... если код в case вырастет, будет сложно читать.
2) convertTo можно изначально делать toLowerCase и писать только одну проверку.
PM MAIL   Вверх
dorogoyIV
Дата 24.2.2012, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 3
Всего: 46



блин, не смог удержаться...

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

PM MAIL   Вверх
Royan
Дата 27.2.2012, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: 3
Всего: 15



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

http://www.oracle.com/technetwork/java/jav...141855.html#277


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
Pretorian
Дата 28.2.2012, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 9.12.2011
Где: нигде

Репутация: 1
Всего: 1



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

http://www.oracle.com/technetwork/java/jav...141855.html#277

А к чему это?
PM   Вверх
chupaYchups
Дата 29.2.2012, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 23.9.2011

Репутация: нет
Всего: нет



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

PM MAIL   Вверх
carper
Дата 1.3.2012, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 2.3.2005

Репутация: 1
Всего: 8



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


PM MAIL   Вверх
Сонечка
Дата 1.3.2012, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 19.7.2011
Где: Msс

Репутация: нет
Всего: нет



Мне вот подумалось, что будет, если я выложу свой любимый из текущего проекта класс, который занимает, прости господи, 6000 строк, если на такую милую задачку 9 пунктов нашлось smile 
PM MAIL   Вверх
LSD
Дата 1.3.2012, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



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

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


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Сонечка
Дата 1.3.2012, 16:30 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 19.7.2011
Где: Msс

Репутация: нет
Всего: нет



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

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

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

Добавлено через 3 минуты и 3 секунды
Пересчитала. 50+ классов smile Пакеты определенно полезны(
PM MAIL   Вверх
baldina
Дата 1.3.2012, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 1
Всего: 101



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

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

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

во-во. только она не единственная. нужна архитектура на всех уровнях: приложение, модуль, класс, функция. тогда программа будет короче, понятнее, и, возможно, быстрее.
PM MAIL   Вверх
k0rvin
Дата 1.3.2012, 22:18 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



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

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


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
502
Дата 1.3.2012, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Я всегда прав
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 16.7.2011

Репутация: нет
Всего: 4



Код

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

почему не
Код

String temperatureKelvin = "Temperature is " + temperature;

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

+1
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0859 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.