Zkouška 23.1.2023

Předmět zaměřený na praktické programování v jazyku a prostředí Java
ruby

Zkouška 23.1.2023

Příspěvek od ruby »

Zkouška vypadala podobně jako v minulých letech. Znění ani odpovědi asi nejsou úplně přesné, ale logika otázek snad zachována.

1) Co vypíše následující kód?

Kód: Vybrat vše

public class A {
    public static void appendToString(String s) {
        s = s + " world";
    }

    public static void main(String[] args) {
        String s = "Hello";
        appendToString(s);
        System.out.println(s);
    }
}
Odpověď: Hello (stringy jsou immutable)

2) Co vypíše následující kód?

Kód: Vybrat vše

public class A {
    public static void main(String[] args) {
        int[] array = {1, 2, 3, 4, 5, 6};
        System.out.println(array[1] + array[3]);
    }
}
Odpověď: 6

3) Co udělá následující kód, pokud jsou zaplé asserty?

Kód: Vybrat vše

public class A {
    public static void setInterval(int i) {
        assert i > 0;
        //...
    }

    public static void main(String[] args) {
        setInterval(-1);
    }
}
Odpověď: vyhodí výjimku AssertionError a ukončí program

4) Co vypíše následující kód, pokud metoda someMethod vyhodí MyException?

Kód: Vybrat vše

public class A {
    public static void main(String[] args) {
        try {
            someMethod();
        } catch (MyException e) {
            System.out.println("MyException");
        } catch (Exception e) {
            System.out.println("Exception");
        } finally {
            System.out.println("finally");
        }
    }
}
Odpověď: MyException finally

5) Mějme 3 interfaces:

Kód: Vybrat vše

interface Callable<T> {
	T call();
}

interface Supplier<T> {
	T get();
}

interface Predicate<T>{
	boolean test(T t);
}
Který z následujících kódů se přeloží?

Kód: Vybrat vše

Supplier<Boolean> su = () -> { return true; };
Callable<Boolean> sa = () -> { return true; };
Predicate<Boolean> pr = () -> { return true; };
Odpověď: A, B (predikát potřebuje parametr)

6) Doplňte kód tak, aby se přeložil bez chyby. Chyba je na 2. a 3. řádku.

Kód: Vybrat vše

enum Answer {
    NO, 
    YES;

    private boolean isYes;

    private Answer(boolean isYes) {
        this.isYes = isYes;
    }
}
Odpověď: Je třeba změnit na NO(false) a YES(true).

7) Ke kterému objektu se vztahuje keyword this?

Kód: Vybrat vše

public class A {
    public void someMethod() {
        Thread t = new Thread(() -> System.out.println(this));
    }
}
Odpověď: K objektu t (nejspíš).

8) Napište čítač (long) s metodami inc() a get(), který bude thread-safe.

Odpověď: Metody musí být synchronized.

Kód: Vybrat vše

public class Counter {
    private long counter = 0;

    public synchronized void inc() {
        counter++;
    }

    public synchronized long get() {
        return counter;
    }
}
9) Napište metodu, která má dva parametry typu int, hrubou mzdu a daň v procentech, a vrací hodnotu typu double udávající daň k zaplacení. Ověřte, že daň je v rozmezí 0–100 a mzda je nezáporná, pokud parametry nejsou v pořádku vyhoďte výjimku MyException, která je přímým potomkem java.lang.Exception (předpokládá se, že je deklarovaná a importovaná).

Odpověď: Nezapomenout na dělení ve float-point aritmetice.

Kód: Vybrat vše

public class TaxCalculator {
  public double calculateTax(int gross, int taxPercentage) throws MyException {
    if(gross < 0 || taxPercentage < 0 || taxPercentage > 100) throw new MyException();
    return gross * (taxPercentage / 100.0);
  }
}
10) Doplňte do kódu implementaci iterátoru, který musí být implementován jako anonymní třída.

Kód: Vybrat vše

interface Iterator<T> {
    boolean hasNext();
    T next();
}

public class A {
    int[] elements;
    int numElements;

    public static void main(String[] args) {
        Iterator<Integer> it = // doplňte kód
    }
}
Odpověď:

Kód: Vybrat vše

public class A {
    int[] elements;
    int numElements;

    public static void main(String[] args) {
        Iterator<Integer> it = new Iterator<Integer>() {
            private int i = 0;

            @Override
            public boolean hasNext() {
                return i < numElements;
            }

            @Override
            public Integer next() {
                if(hasNext) return elements[i++];
                else throw new NoSuchElementException();
            }
        };
    }
}
__Karlord19

Re: Zkouška 23.1.2023

Příspěvek od __Karlord19 »

K otázce 7: myslím že `this` se vztahuje k instanci třídy `A`, ke které se vztahuje ta metoda `someMethod`

Kód: Vybrat vše

public class A
{
    public String toString() {
        return "hello there";
    }

    public void someMethod() {
        Thread t = new Thread(() -> System.out.println(this));
        t.start();
    }
    
    public static void main(String[] args) {
        A a = new A();
        a.someMethod();
    }
}
v tomto případě se vypíše hello there, jakožto stringová reprezentace oné instance třídy A

další věc je, že se nezkompiluje, když metodu someMethod dáme jako statickou:

Kód: Vybrat vše

non-static variable this cannot be referenced from a static context
můžu se plést, tak mi kdyžtak řekněte kde
ruby

Re: Zkouška 23.1.2023

Příspěvek od ruby »

__Karlord19 píše: 21. 1. 2024 11:41 K otázce 7: myslím že `this` se vztahuje k instanci třídy `A`, ke které se vztahuje ta metoda `someMethod`
jo, máš pravdu. taky jsem to zkusil
Odpovědět

Zpět na „PGR013 Java“