Vežbe iz osnova Java sintakse
Obrtanje celog broja
Zadat je 32-bitni ceo broj sa znakom; potrebno je obrnuti redosled cifara u tom broju.
Primer 1:
Ulaz: 123
Izlaz: 321Primer 2:
Ulaz: -123
Izlaz: -321Ako nakon obrtanja broj prekorači opseg, vratiti 0.
public class ReverseInteger {
public static void main(String[] args) {
int x = 123;
int y = -123;
System.out.println(reverse(x));
System.out.println(reverse(y));
}
public static int reverse(int x) {
int rev = 0; // za čuvanje obrnutog rezultata
while (x != 0) {
int pop = x % 10; // uzima poslednju cifru broja x
x /= 10; // uklanja poslednju cifru broja x
// Provera prekoračenja: ako je rev > Integer.MAX_VALUE/10 ili rev < Integer.MIN_VALUE/10, doći će do prekoračenja
if (rev > Integer.MAX_VALUE / 10 || (rev == Integer.MAX_VALUE / 10 && pop > Integer.MAX_VALUE % 10)) return 0;
if (rev < Integer.MIN_VALUE / 10 || (rev == Integer.MIN_VALUE / 10 && pop < Integer.MIN_VALUE % 10)) return 0;
rev = rev * 10 + pop; // dodaje pop na kraj broja rev
}
return rev; // vraća obrnuti ceo broj
}
}Ovaj zadatak je zapravo sedmi problem na LeetCode-u. Ako želite da vidite više pristupa rešavanju, pogledajte ovaj članak: LeetCode 7. Obrtanje celog broja — nalazi se u "Ergeovim beleškama za LeetCode" na tehnološkoj platformi.
Ovaj zadatak zapravo vrlo dobro proverava osnovni tip podataka int, operatore za ostatak pri deljenju i deljenje, kao i upotrebu naredbi if i while.
Pretvaranje stringa u ceo broj
Zamislite da treba da implementirate metod parseInt koji string pretvara u ceo broj.
Primer 1 (pozitivan broj):
Ulaz: "42"
Izlaz: 42Primer 2 (negativan broj sa razmacima):
Ulaz: " -42"
Izlaz: -42Primer 3 (sa znakovima koji nisu cifre):
Ulaz: "4193 with words"
Izlaz: 4193Primer 4 (vrednost van opsega int):
Ulaz: "91283472332"
Izlaz: 2147483647public class StringToInteger {
public static void main(String[] args) {
String str1 = "42";
String str2 = " -42";
String str3 = "4193 with words";
String str4 = "91283472332";
System.out.println(parseInt(str1));
System.out.println(parseInt(str2));
System.out.println(parseInt(str3));
System.out.println(parseInt(str4));
}
public static int parseInt(String str) {
int index = 0; // za prolazak kroz string
int sign = 1; // za oznaku znaka
int total = 0; // za čuvanje pretvorenog celog broja
// 1. Preskakanje vodećih razmaka
while (index < str.length() && str.charAt(index) == ' ') index++;
// 2. Provera znaka
if (index < str.length() && (str.charAt(index) == '+' || str.charAt(index) == '-')) {
sign = str.charAt(index) == '+' ? 1 : -1;
index++;
}
// 3. Pretvaranje cifara
while (index < str.length()) {
int digit = str.charAt(index) - '0'; // dobija broj koji odgovara trenutnom znaku
if (digit < 0 || digit > 9) break; // ako nije cifra, izlazi iz petlje
// Provera prekoračenja: ako je total > Integer.MAX_VALUE/10 ili je total == Integer.MAX_VALUE/10 i digit > Integer.MAX_VALUE%10, doći će do prekoračenja
if (total > Integer.MAX_VALUE / 10 || (total == Integer.MAX_VALUE / 10 && digit > Integer.MAX_VALUE % 10)) {
return sign == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
}
total = total * 10 + digit; // dodaje digit na kraj broja total
index++;
}
return total * sign; // vraća pretvoreni ceo broj
}
}Ovaj zadatak je zapravo osmi problem na LeetCode-u. Ako želite da vidite više pristupa rešavanju, pogledajte ovaj članak: LeetCode 8. String u ceo broj (atoi) — nalazi se u "Ergeovim beleškama za LeetCode" na tehnološkoj platformi.
Ovaj zadatak dobro proverava pretvaranje između znakova i celih brojeva, kao i upotrebu naredbi if i while. sadržaj koji prelazi okvire je obrada stringova, na primer uklanjanje razmaka (trim()) ili uzimanje znaka (charAt()), ali o svemu tome biće reči u kasnijim poglavljima.
Zaključak
Nakon ovih vežbi, verujem da ćete u potpunosti ovladati znanjima Java sintakse.
