powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Помогите реализовать
8 сообщений из 8, страница 1 из 1
Помогите реализовать
    #38715598
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне нужно реализовать оценку инженера.
Условие:
Рейтинг инженера будет изменяться от 0 до 10 с десятыми долями( 8,2. 9,4 и т.п)
Каждому цифровому промежутку соответствует словесное отображение рейтинга.

0-5 просто пишется "рейтинг такой то"
5-6 Green
6-7 Silver
7-8 Gold
8-9 Black
9-10 Brilliant

Примеры отображения рейтинга

Рейтинг 4,3
Рейтинг 5,7 Green
Рейтинг 6,2 Silver
Рейтинг 7,4 Gold
Рейтинг 8,6 Black
Рейтинг 9,3 Brilliant
Должна быть предусмотрена возможность менять алгоритм начисления рейтинга в данной логике ( менять цифры при той же механике расчета)

Вопрос: Как лучше сделать, завести отдельный класс в котором указать 6 диапазонов чисел ([0..5],[5-6] и т.д.), которым будет соответствовать строка пояснения, типа Green и т.д.
...
Рейтинг: 0 / 0
Помогите реализовать
    #38715602
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Одно понять не могу, как лучше промежутки задать для:
0-5
5-6
6-7
7-8 Gold
8-9 Black
9-10 Brilliant
...
Рейтинг: 0 / 0
Помогите реализовать
    #38715613
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделала так, но мне кажется это не очень хорошее решение
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
 public String getNameRating(double rating){
          if(rating>0&&rating<=5){
              return "";
          }else if(rating>5&&rating<=6){
              return "GREEN";
          }else if(rating>6&&rating<=7){
              return "SILVER";
          }else if(rating>7&&rating<=8){
              return "GOLD";
          }else if(rating>8&&rating<=9){
              return "BLACK";
          }else if(rating>9&&rating<=10){
              return "BRILLIANT";
          }else{
              return "undefined";
          }
    }
...
Рейтинг: 0 / 0
Помогите реализовать
    #38715645
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JulT,
Если диапазоны, достаточно статичные, то так.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
public enum Grade {
 Low(new DoubleRange(0, 5),
 Green(new DoubleRange(5, 6),
 Silver(new DoubleRange(6, 7),
 Gold(new DoubleRange(7, 8),
 Black(new DoubleRange(8, 9),
 Brilliant (new DoubleRange(9, 10)

 final Range range;

 public Grade(Range range){
   this.range = range;
 }
 
 public static Grade find(double rating){
          for(Grade g : Grade.values()){
                 if(g.range.containsDouble(rating)){
                      return g;
                 }
          }
          throw new IllegalArgumentException("Rating is out of (0-10) range: "  + rating)
 }  
}



Чтобы Low выводил rating, а остальные - имя, нужно завести новый метод, который по-умолчанию в Enum выводит имя, а для Low его переводить.

Если рейтинги меняются в рантайме, то просто заводим Collection для ассоциации Range/Grade.
Range можно найти в Apache Commons Lang
...
Рейтинг: 0 / 0
Помогите реализовать
    #38715648
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczЕсли рейтинги меняются в рантайме, то просто заводим Collection для ассоциации Range/Grade.
Range можно найти в Apache Commons Lang
Или вот тут
http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/Range.html
Выглядит более продвинуто.
...
Рейтинг: 0 / 0
Помогите реализовать
    #38715651
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Круто, спасибо)
...
Рейтинг: 0 / 0
Помогите реализовать
    #38716161
avp.mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
package devrating;

public class DevRating {

    private static final String[] RATINGS = {
        "", "", "", "", "",
        " Green",
        " Silver",
        " Gold",
        " Black",
        " Brilliant"
    };

    private static final int LAST_INDEX = RATINGS.length - 1;

    public static String ratingFullText(double rating) {
        int i = (int)rating;
        return "Rating: " + rating + RATINGS[i > LAST_INDEX ? LAST_INDEX : i];
    }
}


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
package devrating;

import static devrating.DevRating.ratingFullText;
import static java.lang.System.out;

public class Main {

    public static void main(String[] args) {
        out.println(ratingFullText(4.3));
        out.println(ratingFullText(5.7));
        out.println(ratingFullText(6.2));
        out.println(ratingFullText(7.4));
        out.println(ratingFullText(8.6));
        out.println(ratingFullText(9.3));

        out.println(ratingFullText(2));
        out.println(ratingFullText(5));
        out.println(ratingFullText(10));
        out.println(ratingFullText(100) + " too");
    }
}
...
Рейтинг: 0 / 0
Помогите реализовать
    #38716165
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avp.mk,

Это подходит только для равномерного распределения шкалы.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Помогите реализовать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]