BUBS - Barely Ubuntu Bar Sport

Nerd Bar => Supporto TeNNico => Topic aperto da: Buntolo - 14 Agosto 2017, 12:15:52

Titolo: Programmatrotazione buntoliana
Inserito da: Buntolo - 14 Agosto 2017, 12:15:52
Sto seguendo questo corso di Giava: http://www.learnjavaonline.org/en/Conditionals
Come esercizio devo far sì che il seguente codice restituisca i 3 valori booleani b1, b2 e b3 come true; per farlo posso solo cambiare le variabili a, b, c, d:
Codice: [Seleziona]
public class Main {
    public static void main(String[] args) {
        String a = new String("Wow");
        String b = "Wow";
        String c = a;
        String d = c;

        boolean b1 = a == b;
        boolean b2 = b.equals(b + "!");
        boolean b3 = !c.equals(a);

        if (b1 && b2 && b3) {
            System.out.println("Success!");
        }
    }
}

Mi ci sono scervellato e l'ho trovato impossibile, al massimo potevo rendere true b1 oppure b2 e b3, ma non tutti insieme. Guardo la soluzione e usa codice mai spiegato prima, mi date una mano? Da che ho capito dribbla il problema forzando true, ossia con un override fa sì che i valori booleani siano true a prescindere che sia davvero così, Giusto?
Codice: [Seleziona]
public class Main {
    public static void main(String[] args) {
        Main a = new Main() {
            @Override
            public boolean equals(Object obj) {
                return true;
            }
        };

        Main b = a;

        Main c = new Main() {
            @Override
            public boolean equals(Object obj) {
                return false;
            }
        };

        boolean b1 = a == b;
        boolean b2 = b.equals(b + "!");
        boolean b3 = !c.equals(a);

        if (b1 && b2 && b3) {
            System.out.println("Success!");
        }
    }
}
Titolo: Re:Programmatrotazione buntoliana
Inserito da: sgnablo - 20 Agosto 2017, 19:10:46
sostanzialmente quello che fa è fare un overriding del metodo equals, in modo che restituisca sempre true indipendentemente dall'operando. + l'unico modo per far si che b sia uguale a se stesso + !
tuttavia, non avevo mai visto l'uso di new Main(), quindi non capisco bene come diavolo funziona. probabilmente è una funzione di lib.
Titolo: Re:Programmatrotazione buntoliana
Inserito da: Buntolo - 20 Agosto 2017, 21:52:47
sostanzialmente quello che fa è fare un overriding del metodo equals, in modo che restituisca sempre true indipendentemente dall'operando. + l'unico modo per far si che b sia uguale a se stesso + !
tuttavia, non avevo mai visto l'uso di new Main(), quindi non capisco bene come diavolo funziona. probabilmente è una funzione di lib.

Ok, per ora sono tornato a studiare C++, lo trovo più adatto al mio cervello. Secondo te con un po' più basi di C++ riuscirò a capire meglio Java?
Titolo: Re:Programmatrotazione buntoliana
Inserito da: sgnablo - 21 Agosto 2017, 20:38:56
ni. son due linguaggi diversi. per dirne una, java non ha l'ereditarietà multipla (devi fare un workaround usando le interface), mentre c++ ce l'ha nativa. tuttavia, nella OOP io mi son trovato meglio col Java (anche se ho usato il c++ solo a livello accademico per esami universitari. se dovessi rimettermici ora, probabilmente riuscirei meglio), soprattutto usando framework come spring + maven