Java
2019-04-16
Ostatnio miałem przyjemność rozwiązania dość ciekawego zadania z Javy. Jego treść brzmi tak:
Napisz program, który wczyta jeden wiersz tekstu i wydrukuje go w wersji zaszyfrowanej. Szyfrowanie pojedynczej litery polega na odpowiedniej zamianie kolejności czterech najmniej znaczących bitów. Miejscami powinny zostać zamienione trzeci bit z czwartym oraz pierwszy z drugim. Program ma wczytywać ze strumienia wejściowego znaki tak długo, aż napotka znak nowej linii. Wówczas ma wypisać zakodowany ciąg znaków.
Po pierwsze porusza temat zagadnienie tych najmniej ważnych bitów.
Po drugie podczas zadania przechodzimy od formy zwykłego znaku np. 'a' do postaci bitowej.
Wygląda to mniej więcej tak:
Tekst wczytuję za pomocą klasy Scanner.
Naciśnięcie Enter na klawiaturze spowoduje zakończenie skanowania i przejścia do funkcji getEncrypted().
Jeżeli chcemy szyfrować pojedynczy znak to musimy go jakoś "wyłuskać" z całego tekstu.
W tym celu za pomocą funkcji toCharArray() zamieniam obiekt String na char[]. To pozwoli mi iterować po wszystkich.
Funkcja encrypt() jako parametr dostaje znak do zaszyfrowania i zwraca już gotowy. Zobaczmy jak ona wygląda.
Kluczowa jest tutaj funkcja toBinaryString(). Zamienia ona kod ASCII danej litery (character & 0xFF) na ciąg zer i jedynek.
Problem z nią jest jednak taki, że usunie zera z prawej strony. Za pomocą formatowania określamy, że ciąg ma mieć 8 znaków:
String.format("%8s",
Oraz puste miejsca mają zostać wypełnione zerami:
.replace(' ', '0');
Później formę binarną znów zamieniamy na tablicę znaków i za pomocą funkcji replaceBits() przestawiam znaki.
Funkcja w return
z powrotem zamienia postać bitów na char.
Kod nie jest za bardzo uniwersalny, ale w zadaniu jest jasno określone, że mamy przestawić trzeci z czwartym od końca oraz ostatni z przedostatnim.
Ten prosty algorytm to realizuje :)
Jeżeli nic po drodze się nie zepsuło to kod powinien zadziałać w powyższy sposób.
Dziękuję Ci za przeczytanie tego materiału 😀 Jeżeli spodobało Ci się to o czym piszę, możesz sprawdzić więcej materiałów na blogu lub udostępnić znajomym. Będzie mi bardzo miło 😊
Jestem młodym programistą, który dumnie dzierży wiele pasji takich jak bieganie czy piwowarstwo domowe. Jedną z nich jest także programowanie i o tym właśnie zamierzam tutaj pisać.
Zachęcam Cię do odwiedzenia mojej strony na Google Play store i sprawdzenia wszystkich moich aplikacji.