Pravougaonik
Učitavaju se dužine stranica pravougaonika a i b (realni brojevi). Ispisati obim i površinu na dve decimale, u dva reda.
Primer
Ulaz
3.5 2Izlaz
O = 11.00
P = 7.00Svaki podatak u programu čuva se u promenljivoj određenog tipa. Tip određuje koliko memorije podatak zauzima, koje vrednosti može da ima i koje operacije su dozvoljene. U ovoj lekciji su prosti tipovi Jave, deklaracija i dodela, konstante, konverzije tipova i unos podataka pomoću klase Scanner.
Promenljiva se pre upotrebe deklariše: navodi se tip, pa ime. Vrednost se zadaje operatorom dodele =, odmah ili kasnije.
public class Main {
public static void main(String[] args) {
int brojUcenika; // deklaracija
brojUcenika = 28; // dodela vrednosti
double prosek = 4.37; // deklaracija sa početnom vrednošću
char ocena = 'A'; // jedan znak – jednostruki navodnici
boolean polozio = true; // logička vrednost: true ili false
String ime = "Marija"; // tekst – dvostruki navodnici (String nije prost tip)
System.out.println(ime + " ima prosek " + prosek);
System.out.println("U odeljenju je " + brojUcenika + " ucenika.");
System.out.println("Ocena: " + ocena + ", polozio: " + polozio);
}
}
Ime promenljive počinje slovom, a dalje može da sadrži slova, cifre i _. Po dogovoru se piše camelCase: brojUcenika, prosekOcena. Velika i mala slova se razlikuju – ime i Ime su dve različite promenljive.
Java ima 8 prostih (primitivnih) tipova. Njihova veličina je ista na svakom računaru:
| Tip | Veličina | Opseg vrednosti | Primer |
|---|---|---|---|
byte | 1 bajt | −128 … 127 | byte b = 100; |
short | 2 bajta | −32 768 … 32 767 | short s = 2000; |
int | 4 bajta | oko ±2,1 milijarde | int n = 150000; |
long | 8 bajtova | oko ±9,2 · 1018 | long l = 8000000000L; |
float | 4 bajta | oko 7 značajnih cifara | float f = 3.14f; |
double | 8 bajtova | oko 15 značajnih cifara | double d = 3.14159; |
char | 2 bajta | jedan Unicode znak | char c = 'Ž'; |
boolean | – | true ili false | boolean ok = false; |
Za cele brojeve najčešće se koristi int, a kada vrednosti mogu preći 2 milijarde – long (broj se završava slovom L). Za realne brojeve koristi se double.
public class Main {
public static void main(String[] args) {
System.out.println("int: " + Integer.MIN_VALUE + " .. " + Integer.MAX_VALUE);
System.out.println("long: " + Long.MAX_VALUE);
int max = Integer.MAX_VALUE;
System.out.println("max + 1 = " + (max + 1)); // prekoračenje: prelazi na najmanji int
long veliki = (long) max + 1;
System.out.println("kao long: " + veliki);
}
}
Prekoračenje (overflow) se ne prijavljuje kao greška – rezultat je jednostavno pogrešan. Na takmičenjima je to česta greška: kada se množe veliki brojevi, koristi long.
Vrednost koja se ne menja deklariše se rečju final. Imena konstanti pišu se velikim slovima:
public class Main {
public static void main(String[] args) {
final double PDV = 0.20; // stopa poreza – ne menja se
final int BROJ_DANA_U_NEDELJI = 7;
double cenaBezPdv = 1250.0;
double cena = cenaBezPdv * (1 + PDV);
System.out.println("Cena sa PDV-om: " + cena);
System.out.println("Dve nedelje imaju " + 2 * BROJ_DANA_U_NEDELJI + " dana.");
// PDV = 0.18; // greška pri prevođenju: final promenljiva se ne može menjati
}
}
Kada se manji tip dodeljuje većem (int → long → double), konverzija je automatska. Obrnuto se mora napisati eksplicitno, kastovanjem: (int) x. Tada se decimale odsecaju.
public class Main {
public static void main(String[] args) {
int a = 7, b = 2;
System.out.println(a / b); // 3 – deljenje dva int-a je celobrojno
System.out.println((double) a / b); // 3.5 – jedan operand je double
System.out.println(a / 2.0); // 3.5
double x = 9.87;
int odseceno = (int) x; // 9 – decimale se odsecaju, ne zaokružuje se
long zaokruzeno = Math.round(x); // 10
System.out.println(odseceno + " " + zaokruzeno);
char c = 'A';
int kod = c; // 65 – kod znaka
char sledeci = (char) (c + 1); // 'B'
System.out.println(kod + " " + sledeci);
int broj = Integer.parseInt("123"); // tekst -> broj
String tekst = String.valueOf(456); // broj -> tekst
System.out.println(broj + 1);
System.out.println(tekst + 1);
}
}
Poslednja dva reda pokazuju razliku: 123 + 1 je sabiranje, a "456" + 1 je spajanje teksta.
Podaci sa tastature čitaju se objektom klase Scanner iz paketa java.util. Za svaki tip postoji metoda:
| Metoda | Čita |
|---|---|
nextInt() | ceo broj (int) |
nextLong() | ceo broj (long) |
nextDouble() | realan broj |
next() | jednu reč (do razmaka) |
nextLine() | ceo red teksta |
nextBoolean() | true ili false |
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Ime: ");
String ime = sc.next();
System.out.print("Godine: ");
int godine = sc.nextInt();
System.out.print("Visina u metrima: ");
double visina = sc.nextDouble();
System.out.println();
System.out.println(ime + " ima " + godine + " godina i visok je " + visina + " m.");
System.out.println("Za 5 godina imace " + (godine + 5) + " godina.");
sc.close();
}
}
Realan broj se unosi sa tačkom ili zarezom, zavisno od jezika podešenog na računaru. Ako unos 1.62 izazove grešku InputMismatchException, napravi Scanner sa new Scanner(System.in).useLocale(java.util.Locale.US).
Oprez sa nextLine() posle nextInt(): nextInt() ne pročita kraj reda, pa prvi nextLine() vrati prazan tekst. Rešenje je jedan „prazan“ poziv sc.nextLine(); pre čitanja reda.
System.out.printf ispisuje vrednosti po šablonu, kao u jeziku C. Najčešće oznake: %d ceo broj, %f realan broj, %.2f na dve decimale, %s tekst, %n novi red.
public class Main {
public static void main(String[] args) {
String proizvod = "Sveska";
int komada = 3;
double cena = 149.9;
System.out.printf("%s x %d = %.2f din%n", proizvod, komada, komada * cena);
System.out.printf("|%5d|%-8s|%8.1f|%n", 42, "Java", 3.14159);
}
}
Broj između % i slova je širina polja; znak minus poravnava ulevo. Decimalni separator zavisi od jezika sistema – na srpskom podešavanju ispis može biti 449,70.
Za svaki zadatak postoji primer, uputstvo i rešenje. Rešenja su provereno tačna na primerima iz teksta.
Učitavaju se dužine stranica pravougaonika a i b (realni brojevi). Ispisati obim i površinu na dve decimale, u dva reda.
3.5 2O = 11.00
P = 7.00Učitava se broj sekundi s (0 ≤ s < 109). Ispisati vreme u obliku h:mm:ss.
37251:02:05590:00:59Učitavaju se dva cela broja a i b (1 ≤ a, b ≤ 2 000 000 000). Ispisati njihov zbir i proizvod.
2000000000 32000000003
6000000000"A" je String), a znak u jednostrukim ('A' je char).7 / 2 je 3 – ako treba 3.5, bar jedan operand mora biti double.int: koristi long i slovo L na kraju konstante.nextInt() a pre nextLine() pozovi jedan prazan sc.nextLine();.1. Koji tip se koristi za broj 8 000 000 000?
2. Koliko je (int) 9.99?
3. Šta ispisuje System.out.println("5" + 3);?
4. Kojom metodom klase Scanner se čita ceo red teksta?
| Prethodno |<JAVA Predavanja |
Sledeće Grananje u programu>| |
| Tip podatka | Opis | Memorija[bit] |
|---|---|---|
| char | Mali celobrojni podatak. Koristi se za smeštanje znakova | 8 |
| short | Kratak celobrojni podatak | 16 |
| int | Celobrojni podatak | 32 |
| long | Dugački celobrojni podatak | 64 |
| float | Realan broj u jednostrukoj preciznosti | 32 |
| double | Realan broj u dvostrukoj preciznosti | 64 |
| boolean | Logički tip podatka(može biti true ili false) | 1 |