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
}
}
