package net.traininguniverse.srednia_ocen; /** * * Program wyliczający średnią ocen z kilku przediotów w szkole. * */ public class Main { public float obliczSrednia(int[][] uczen) { float suma = 0; for (int i = 0; i < uczen.length; ++i) for (int j = 0; j < uczen[i].length; ++j) { suma += uczen[i][j]; } return suma / (uczen.length * uczen[uczen.length - 1].length); } public static void main(String[] args) { int numberOfClasses = 3; // liczba przedmiotów int numberOfNotes = 4; // liczba ocen z danego przedmiotu int[][] Pawel = new int[numberOfClasses][numberOfNotes]; Pawel[0] = new int[] { 2, 2, 2, 2 }; Pawel[1] = new int[] { 3, 3, 3, 3 }; Pawel[2] = new int[] { 5, 5, 5, 5 }; Main main = new Main(); System.out.println(main.obliczSrednia(Pawel)); } }
Java | dostęp do klas
Ćwiczenie.
Napisz klasę ConnectionManager, która będzie zarządzać tablicą obiektów Connection (tablica ma mieć stałą liczbę elementów). Programista-klient nie ma mieć możliwości jawnego tworzenia obiektów klasy Connection, polegając jedynie na statycznej metodzie z klasy ConnectionManager. Kiedy klasie ConnectionManager skończą się obiekty Connection, metoda ta powinna zwracać referencję pustą. Prztestuj działanie klas w metodzie main().
Rozwiązanie:
package net.traininguniverse.access; class Connection { private Connection() { } public static Connection makeConnection() { return new Connection(); } } public class ConnectionManager { static int count = 0; static final int size = 2; static Connection makeConnection() { count++; if (count <= size) return Connection.makeConnection(); else return null; } public static void main(String[] args) { Connection[] connections = new Connection[size]; connections[0] = makeConnection(); connections[1] = makeConnection(); System.out.println(connections[1]); System.out.println(makeConnection()); } }
Java | pola chronione
Ćwiczenie:
Utwórz klasę z polami chronionymi i drugą (w tym samym pliku), która posiada metodę manipulującą danymi chronionymi z pierwszej klasy.
Rozwiązanie:
package net.traininguniverse.main; class Animal{ protected String name; protected int age; } public class Main { void setName(Animal animal, String name){ animal.name = name; } String getName(Animal animal){ return animal.name; } void setAge(Animal animal, int age){ animal.age = age; } int getAge(Animal animal){ return animal.age; } public static void main(String[] args){ Animal animal = new Animal(); Main main = new Main(); main.setName(animal,"Reksio"); main.setAge(animal,5); String name = main.getName(animal); int age = main.getAge(animal); System.out.println("Zwierzak nazywa się: " + name + " oraz ma " + age + " lat"); } }
Uwaga!
Tylko jedna klasa może być publiczna, inaczej kompilator wyrzuci błąd, że muszą być w oddzielnych plikach.
Java | dostęp do metod chronionych
Ćwiczenie.
Wykaż, że metody chronione podlegają dostępowi pakietowemu, ale nie są metodami publicznymi.
Rozwiązanie:
Tworzymy dwie klasy: Animal i Owner w dwóch oddzielnych pakietach.
Odpowiednie klasy są dostępne poniżej:
Animal.java:
package net.traininguniverse.hiddden; public class Animal { protected boolean isHungry(boolean feed) { if (feed) return false; else return true; } public boolean showIsHungry(boolean feed) { return isHungry(feed); } }
Owner.java:
package net.traininguniverse.main; import net.traininguniverse.hiddden.Animal; public class Owner { public static void main(String[] args) { Animal animal = new Animal(); //animal.isHungry(true); //blad kompilatora (protected access), wiec nie jest publiczna System.out.println(animal.showIsHungry(true)); //wyswietla false, czyli podlega dostepowi pakietowemu } }