Cześć,
na potrzeby pewnego zadania tworzę konwerter RGB to HEX w poleceniu obowiązuje kilka zasad:
- Przyjmowane są wartości od 0-255 jeżeli któraś nie jest w tym zakresie, powinna być zaokrąglona do najbliższej granicy
- Wynik powinien mieć zawsze 6 znaków, jeżeli któraś wartość ma mniej, należy dopisać przed nią 0
Do tego celu używam funkcji przetwarzających kolekcję, cały kod napisany jest w Kotlinie, jednak jest prawie identyczny jak w Javie.
Na początku przetwarzam liczby na wartości szesnastkowe, następnie za pomocą funkcji reduce mierzę długości stringów, jeżeli trzeba to dopisuje 0.
W tej części występuje problem: funkcja działa prawidłowo jeżeli 0 trzeba dopisać w innym miejscu niż na początku. W przypadku wartości np:
rgb(11, 11, 11)
funkcja powinna zwrócić:
0B0B0B
a zwraca:
B0B0B
Cały kod:
fun rgb(r: Int, g: Int, b: Int) : String{
return intArrayOf(r,g,b).map { if(it < 0) Integer.toHexString(0) else if(it > 255) Integer.toHexString(255) else Integer.toHexString(it)}
.reduce{acc,element -> if(element.length < 2) acc+"0"+element else acc+element.toString()}.toUpperCase())
}
PS.
na forum brakuje kategorii Kotlin