+ Antworten
Seite 20 von 21 ErsteErste ... 10 17 18 19 20 21 LetzteLetzte
Ergebnis 381 bis 400 von 403

Thema: Java Quiz

  1. #381
    Global Moderator Viertel Gigabyte
    Registriert seit
    05.08.2008
    Fachbeiträge
    4.965
    Genannt
    325 Post(s)
    Und wo du das schreibst, frage ich mich, warum ich, als ich
    someFloat = someFloat + someDouble
    geschrieben habe, nicht gemerkt habe, dass das Unfug ist...

  2. #382
    Global Moderator Megabyte Themenstarter
    Avatar von Landei
    Registriert seit
    31.07.2013
    Ort
    Sandersdorf-Brehna
    Fachbeiträge
    1.003
    Genannt
    169 Post(s)
    Blog-Einträge
    27
    Geklaut von stackoverflow:

    Java Code:
    1. public class Animal {
    2.  
    3.     private void eat() {
    4.         System.out.println("animal eating");
    5.     }
    6.  
    7.     public static void main(String args[]) {
    8.  
    9.         Animal a = new Horse();
    10.         a.eat();
    11.  
    12.     }
    13.  
    14. }
    15.  
    16. class Horse extends Animal {
    17.     public void eat() {
    18.         System.out.println("Horse eating");
    19.     }
    20. }

    Was wird beim Ausführen der main-Methode angezeigt, und vor allem: Warum?

  3. #383
    User Kilobyte
    Registriert seit
    25.09.2008
    Fachbeiträge
    245
    Genannt
    15 Post(s)
    Mein Versuch
    Meine Vermutung ist nun , dass "animal eating" ausgegeben wird, da die Methode eat private ist und somit nicht von Horse überschrieben wird. (nennt man das dann trotzdem überladen?)
    da a von statischen Typ Animal ist, wird die Animal.eat() methode gerufen.

  4. #384
    Global Moderator Megabyte Themenstarter
    Avatar von Landei
    Registriert seit
    31.07.2013
    Ort
    Sandersdorf-Brehna
    Fachbeiträge
    1.003
    Genannt
    169 Post(s)
    Blog-Einträge
    27
    Stimmt. Ist schon etwas seltsam, wenn das hier:

    Java Code:
    1.  
    2. Horse h = new Horse();
    3. h.eat();
    4. Animal a = h;
    5. a.eat();

    zwei unterschiedliche Ausgaben liefert...

  5. #385
    User Megabyte Avatar von Timothy_Truckle
    Registriert seit
    01.08.2013
    Ort
    Wasserkuppe
    Fachbeiträge
    1.332
    Genannt
    86 Post(s)
    Blog-Einträge
    5
    Zitat Zitat von Landei Beitrag anzeigen
    Stimmt. Ist schon etwas seltsam, wenn das hier:

    Java Code:


    Horse h = new Horse();
    h.eat();
    Animal a = h;
    a.eat();


    zwei unterschiedliche Ausgaben liefert...
    Das klappt aber nur, weil Du in der inneren Klasse von (oder wenigstens in der selben Datei wie) Animal bist.

    Aus einer anderen Klasse(-ndatei) geht das nicht.

    bye
    TT
    Geändert von Timothy_Truckle (22.08.2016 um 17:29 Uhr)

  6. #386
    Global Moderator Viertel Gigabyte
    Registriert seit
    05.08.2008
    Fachbeiträge
    4.965
    Genannt
    325 Post(s)
    Nun... wenn es anders wäre, wäre der Sinn von private ja auch irgendwie ad absurdum geführt. Inbesondere könnte man ja NIE eine private Methode zu einer Klasse hinzufügen, weil man NIE sicher sein könnte, dass nicht irgendjemand schon von der Klasse erbt und die gleiche Methode implementiert hat (die ja dann die zu erstellende Methode überschreiben würde). Um das ganze klarer zu machen, gibt es ja @Override.

  7. #387
    Global Moderator Viertel Gigabyte Avatar von SlaterB
    Registriert seit
    06.08.2008
    Fachbeiträge
    2.716
    Genannt
    291 Post(s)
    Zitat Zitat von Marco13 Beitrag anzeigen
    Inbesondere könnte man ja NIE eine private Methode zu einer Klasse hinzufügen, weil man NIE sicher sein könnte, dass nicht irgendjemand schon von der Klasse erbt und die gleiche Methode implementiert hat (die ja dann die zu erstellende Methode überschreiben würde). Um das ganze klarer zu machen, gibt es ja @Override.
    wenn es nur etwas gäbe, um Methoden (oder gar die Klasse, String..) final zu machen

    (schon klar was du meinst, aber der Punkt darf bei der Aufzählung nicht recht fehlen)
    (edit: ok, doch nicht ganz richtig beim ersten Lesen gelesen, du meinst nachträglich in der Oberklasse, dennoch..)
    Hansa wird Meister

  8. #388
    User Megabyte Avatar von Timothy_Truckle
    Registriert seit
    01.08.2013
    Ort
    Wasserkuppe
    Fachbeiträge
    1.332
    Genannt
    86 Post(s)
    Blog-Einträge
    5
    Zitat Zitat von SlaterB Beitrag anzeigen
    wenn es nur etwas gäbe, um Methoden (oder gar die Klasse, String..) final zu machen
    Das ist doch gar nicht die Lösung, sondern "jede Klasse in einer eigenen Datei"...

    bye
    TT

  9. #389
    Global Moderator Viertel Gigabyte
    Registriert seit
    05.08.2008
    Fachbeiträge
    4.965
    Genannt
    325 Post(s)
    ... was aber nochmal unabhängig von der Frage ist, wo denn die main() steht.
    Ich denke, es ist klar, worauf mit der Frage abgezielt wurde.

  10. #390
    Global Moderator Megabyte Themenstarter
    Avatar von Landei
    Registriert seit
    31.07.2013
    Ort
    Sandersdorf-Brehna
    Fachbeiträge
    1.003
    Genannt
    169 Post(s)
    Blog-Einträge
    27
    Zitat Zitat von Marco13 Beitrag anzeigen
    ... was aber nochmal unabhängig von der Frage ist, wo denn die main() steht.
    Ich denke, es ist klar, worauf mit der Frage abgezielt wurde.
    Die main-Methode muss entweder in Animal stehen, oder man macht beide Klassen zu inneren statischen Klassen, dann kann sie in der äußeren Klassen stehen.

  11. #391
    User Kilobyte
    Registriert seit
    25.09.2008
    Fachbeiträge
    245
    Genannt
    15 Post(s)
    Java Code:
    1. import java.util.Hashtable;
    2.  
    3. public class Test<T>{    
    4.   public  Hashtable<Integer,String> getElements(){
    5.     return new Hashtable<Integer,String>();
    6.   }
    7.  
    8.   public T getParent(){
    9.     return null;
    10.   }
    11.  
    12.  
    13.   public static void main(String[] args) {
    14.     Test test = new Test();  
    15.    
    16.     System.out.println(test.getParent().toString());
    17.    
    18.     for (String p:  test.getElements().values()){
    19.       System.out.println("inside the loop");
    20.     }  
    21.     System.out.println("Finished");
    22.   }
    23. }

    Was ist die Ausgabe dieses Programms wenn man es compiliert und laufen lässt.

  12. #392
    Global Moderator Viertel Gigabyte Avatar von SlaterB
    Registriert seit
    06.08.2008
    Fachbeiträge
    2.716
    Genannt
    291 Post(s)
    ist der Code wirklich so gedacht?
    weiter
    wie nur schwer zu erkennen kompiliert die Schleife gar nicht ohne Änderung, wegen nicht gesetzten generischen Typ, komplizierte Regeln

    wie recht gut zu erahnen, liefert getParent() null, ergo Ausgabe dazu NullPointerException,

    ändert man auch das dann liefert die Schleife natürlich nichts mangels Elemente, nur Ausgabe dahinter erscheint

    wo ist der Witz oder waren es diese Erkenntnisse? ok, das erste mit Generics wohl
    Geändert von SlaterB (24.08.2016 um 09:36 Uhr)
    Hansa wird Meister

  13. #393
    User Kilobyte
    Registriert seit
    25.09.2008
    Fachbeiträge
    245
    Genannt
    15 Post(s)

    Der Code war absichtlich so, da man, wie du selbst geschrieben hast, den Compile-Fehler sehr leicht übersieht. Daher hab ich einfach die NPE als "falsche" Antwort dazugegeben.
    So ein Ähnlicher Code ist bei mir produktive gewesen. Zuerst war die Klassen nicht generisch, getParent() hatte immer Object zurückgegeben. Aber sie hatte eine Methode, die eine generische Hashtable zurückgegeben hat, so wie in diesem Bsp die Methode getElements();

    Als ich dann die Klasse gerefactored habe und die Klasse generisch wurde, sodass getParent() nicht mehr Object sondern eben den Generischen Type zurück gegeben hat, dachte ich mir dass das kein Problem sein sollte. War aber nicht so. Aus einem für mich unerklärlichen Grund verliert die Methode getElements() ebenfalls die generische Information, wenn Test ohne Type Parameter erstellt wird, und das obwohl getElements nichts mit dem Type Parameter zu tun hat.




  14. #394
    Global Moderator Viertel Gigabyte Avatar von SlaterB
    Registriert seit
    06.08.2008
    Fachbeiträge
    2.716
    Genannt
    291 Post(s)
    Java Code:
    1. public class Test {
    2.     public static void main(String[] args) {
    3.         boolean b = true;
    4.         b = b || test();
    5.         b = b | test();
    6.         b |= test();
    7.         System.out.println("b: " + b);
    8.     }
    9.  
    10.     public static boolean test() {
    11.         System.out.println("test");
    12.         return Math.random() < 3;
    13.     }
    14. }
    wie oft erscheint die Ausgabe 'test'?
    Hansa wird Meister

  15. #395
    Frequent User Megabyte
    Registriert seit
    01.08.2013
    Fachbeiträge
    1.741
    Genannt
    114 Post(s)
    2x. Der Aufruf aus Zeile 4 wird aufgrund der lazy evaluation nicht ausgeführt. Die anderen beiden Operationen arbeiten bitweise und werden daher ausgeführt.

  16. #396
    Frequent User Megabyte
    Registriert seit
    01.11.2013
    Fachbeiträge
    1.279
    Genannt
    192 Post(s)
    Blog-Einträge
    1
    Die Antwort von Herrn cmrudolph hab ich auch:
    Zeile 3 gibt nix aus.
    Zeile 4 gibt auch nix aus, weil der Operator kurzschließend ist.
    Zeile 5 und 6 gibt jeweils "test" aus, da der Operator nicht kurzschließend ist.
    Zeile 7 gibt dann "b: true" aus, da die veroderung basierend auf true keinen Effekt hat.
    Antwort : 2x .
    Näher an den Bits, näher an der Materie
    Java Quiz

  17. #397
    Global Moderator Viertel Gigabyte Avatar von SlaterB
    Registriert seit
    06.08.2008
    Fachbeiträge
    2.716
    Genannt
    291 Post(s)
    Rückmeldung braucht es ja nicht unbedingt,
    wer es zu genau wissen will und Zweifel hat kann es ausprobieren ,
    schade manchmal dass es nicht ||= gibt, aber die Gründe wie schlechte Lesbarkeit sind auch nicht ganz ohne
    Hansa wird Meister

  18. #398
    Frequent User Viertel Megabyte Avatar von Firephoenix
    Registriert seit
    31.07.2013
    Fachbeiträge
    252
    Genannt
    25 Post(s)
    Bin zwar sonst eher lesend unterwegs, meinen -Moment der Woche will ich aber mal teilen

    Java Code:
    1. import java.io.IOException;
    2. import java.io.InputStream;
    3.  
    4. public class Test {
    5.  
    6.     private static class NotSoReliableInputSource extends InputStream {
    7.  
    8.     private String string;
    9.     private int pos = 0;
    10.  
    11.     public NotSoReliableInputSource(String string) {
    12.         this.string = string;
    13.     }
    14.  
    15.     @Override
    16.     public int read() throws IOException {
    17.         if (pos < string.length() / 2) {
    18.             return string.charAt(pos++);
    19.         } else {
    20.             throw new IOException("Timeout!");
    21.         }
    22.     }
    23.  
    24.     }
    25.  
    26.     public static void main(String[] args) throws IOException {
    27.     String result;
    28.     String string = "Timeout?";
    29.     try (NotSoReliableInputSource in = new NotSoReliableInputSource(string)) {
    30.         byte[] b = new byte[string.length()];
    31.         in.read(b, 0, string.length());
    32.         result = new String(b);
    33.     } catch (IOException e) {
    34.         result = e.getMessage();
    35.     }
    36.     System.out.println(result);
    37.     // [a] Timeout?
    38.     // [b] Timeout!
    39.     // [c] ???
    40.     }
    41. }

  19. #399
    Global Moderator Viertel Gigabyte
    Registriert seit
    05.08.2008
    Fachbeiträge
    4.965
    Genannt
    325 Post(s)
    Intuitive Antwort: Was ist die Ausgabe?
    Java Code:
    1.  
    2. import java.util.Arrays;
    3. import java.util.BitSet;
    4.  
    5. public class BitSetTest
    6. {
    7.     public static void main(String[] args)
    8.     {
    9.         BitSet bitSet = new BitSet();
    10.         int bitIndex = 0;
    11.         bitSet.set(bitIndex++, true);
    12.         bitSet.set(bitIndex++, false);
    13.         bitSet.set(bitIndex++, true);
    14.         bitSet.set(bitIndex++, false);
    15.        
    16.         int expected[] = { 1, 0, 1, 0 };
    17.         int array[] = bitSet.stream().toArray();
    18.         System.out.println(Arrays.equals(expected, array));
    19.     }
    20. }

  20. #400
    Frequent User Megabyte
    Registriert seit
    01.08.2013
    Fachbeiträge
    1.741
    Genannt
    114 Post(s)
    Intuitiv true, wahrscheinlich aber false, weil intern mit ganzen Bytes gearbeitet wird und das per stream erzeugte Array 8 Bits lang ist?
    Edit: ok, intuitiv ist es tatsächlich nicht, aber wenn man die JavaDoc liest, ist das Verhalten immerhin dokumentiert.
    P. S.: meine Begründung war falsch.
    Geändert von cmrudolph (25.01.2017 um 16:16 Uhr)

+ Antworten Thema als "gelöst" markieren
Seite 20 von 21 ErsteErste ... 10 17 18 19 20 21 LetzteLetzte

Direkt antworten Direkt antworten

In welchem Jahr endete der 2. Weltkrieg?

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 01.11.2009, 01:09
  2. Antworten: 0
    Letzter Beitrag: 05.01.2009, 17:21
  3. [Erledigt] Quiz grafisch umsetzen.
    Von swerflash im Forum AWT, Swing, JavaFX & SWT
    Antworten: 6
    Letzter Beitrag: 19.12.2006, 18:29

Berechtigungen

  • Neue Themen erstellen: Ja
  • Themen beantworten: Ja
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •