Obliczanie średniej ocen z przedmiotów – Java

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