Java Applet |
|
Was hast du getan, um diesen Wert für (long)b zu bekommen?
code: |
1:
2:
3:
4:
5:
6:
7:
|
public static void main(String[] args) {
long a = 1234567890123456789L;
float b = a; // b=1.23456794E18
System.out.println(a); //1234567890123456789
System.out.println(b); //1.23456794E18
System.out.println((long)b); //1234567939550609408
} |
|
Zitat: |
Für Kommazahlen wurden nur in Form von Gleitpunktzahlen mit float, long, bigdecimal gehen. |
ich hoffe, du meintest double, als du long geschrieben hast.
__________________ Syntax Highlighting fürs Board (Link)
|
|
03.02.2014 16:17 |
|
|
tigerbine
Grünschnabel
Dabei seit: 03.06.2007
Beiträge: 2
|
|
Das ist ein Beispiel aus "Einstieg in Java, Galileo Computing". Da habe ich einen Punkt vergessen
code: |
1:
2:
3:
4:
5:
6:
7:
|
public static void main(String[] args) {
long a = 1234567890123456789L;
float b = a; // b=1.23456794E18
System.out.println(a); //1234567890123456789
System.out.println(b); //1.23456794E18
System.out.println((long)b); //1.234567939550609408 |
|
Unten meinte ich double, ja.
|
|
03.02.2014 21:05 |
|
|
ed209
Routinier
Dabei seit: 07.09.2006
Beiträge: 324
|
|
Ich denke dein Verständnis von den Datentypen ist richtig.
Ich habs grad getestet und bekomme folgendes raus.
(long)b ist 1234567939550609408
und (double)b ist 1.23456793955060941E18
Java kennt nativ keine Festkommazahlen, lediglich float und double gemäß IEEE Standard schlagmichtot
Was auch immer in deinem Buch steht, es lohnt sich vielleicht da mit Tippex ranzugehen
|
|
03.02.2014 21:42 |
|
|
|
Sieht gut aus
In Zeile 4, 12, 13 fehlt ein ;
Zeile 12: new StringBufferDemo(), also mit Klammern
Die Zeilen 13 und 15 könnte man auch zusammenfassen:
code: |
1:
|
StringBuffer str = stretch.string(); |
|
oder gleich die ganze main in einer Zeile (mit dem Nachteil, dass du danach nicht mehr auf den String zugreifen kannst, sondern ihn neu erzeugen müsstest):
code: |
1:
|
System.out.println("Ergebnis: " + new StringBufferDemo().string()); |
|
__________________ Syntax Highlighting fürs Board (Link)
|
|
05.02.2014 05:59 |
|
|
tigerbine
Grünschnabel
Dabei seit: 03.06.2007
Beiträge: 2
|
|
Nächste Frage zu einem Algorithmus. Es soll ein Array sortiert werden. Das soll über zwei Schleifen gehen. Ich tippe einen Auszug erstmal ab.
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
|
for(index = 0; index < (array.length-1); index++){
for(int j=index; j<(array.length);j++){
if (array[index]> array[j] { //Vergleich
temp = array[index]; //Zwischenspeicher Minimum
array[index]=array[j]; // Minimum überschreiben
array[j] = temp; //Vertauschung durch temporären Wert
}
}
|
|
Was ich nicht verstehe
* beim Vergleich, ist da nicht in der ersten Runde index = j, und man erhält 'false' und hätte sich diese Prüfung sparen können?
* Warum Minimum, es wird doch der größere der beiden Werte gespeichert bzw. überschrieben?
Danke für eure Hilfe.
|
|
05.02.2014 19:59 |
|
|
Karlito
Kaiser
Dabei seit: 11.04.2011
Beiträge: 1.461
|
|
Hallo tigerbine,
Zitat: |
Original von tigerbine
* beim Vergleich, ist da nicht in der ersten Runde index = j, und man erhält 'false' und hätte sich diese Prüfung sparen können?
|
Ja, hätte man...
Zitat: |
Original von tigerbine
* Warum Minimum, es wird doch der größere der beiden Werte gespeichert bzw. überschrieben?
|
Richtig verstanden. Die Kommentare sind quatsch.
Zitat: |
Original von tigerbine
Danke für eure Hilfe.
|
Bitte
VG,
Karlito
|
|
05.02.2014 20:09 |
|
|
tigerbine
Grünschnabel
Dabei seit: 03.06.2007
Beiträge: 2
|
|
Danke.
Habe das nun auch mal mit dem Debugger nachvollzogen. Ist ja auch eine gute Übung für eine NewBee
|
|
05.02.2014 20:17 |
|
|
tigerbine
Grünschnabel
Dabei seit: 03.06.2007
Beiträge: 2
|
|
Ich habe da nochmal eine Frage zu. Ich habe eine Klasse Musiker, mit den Attributen name, alter und band, sowie einer Methode musizieren.
Davon leite ich eine Klasee Trompeter ab und überschreibe die Methode musizieren. Ansonsten kommt nichts neues hinzu. Wie kann ich einen Trompeter nun instanziieren?
code: |
1:
|
Tompeter trompeter = new Trompeter; |
|
wäre für mich die logische Wahl. Warum geht aber auch
code: |
1:
|
Musiker trompeter = new Trompeter; |
|
die beiden trompeter unterscheiden sich doch nun in der Deklaration.
Für mich passt der Konstruktoaurruf nicht zur Deklaration. Musiker hat doch gar keinen Konstruktior Trompeter. Und was wäre, wenn der Trompeter noch weitere Methoden hätte (mundstückWechseln oder so). Wie passt dies dann in die Deklaration Musiker rein.
Also kurz und knapp, mit was kann man alles eine Deklaration vornehmen (wenn man z.B. ein UML Diagramm vorsich hat)
Danke
|
|
07.02.2014 13:29 |
|
|
Karlito
Kaiser
Dabei seit: 11.04.2011
Beiträge: 1.461
|
|
Hallo tigerbine,
code: |
1:
|
Trompeter trompeter; |
|
gibt an, dass trompeter eine Variable vom Typ Trompeter ist.
code: |
1:
|
Musiker trompeter; |
|
gibt an, dass trompeter eine Variable vom Typ Musiker ist.
Jetzt erbt die Klasse Trompeter von der Klasse Musiker. Die Vererbung kann als eine "ist ein"- Beziehung angesehen werden. D.h. Jeder Trompeter ist auch ein Musiker, da jeder Trompeter alle Eigenschaften und Methoden von Musiker besitzt.
Andersherum funktioniert diese Beziehung jedoch nicht, da nicht alle Musiker Trompeter sind.
Es ist also so, dass entlang der Vererbungshierarchie alle spezialisierten Objekte auch den Typ aller geerbten Klassen annehmen kann. In Java ist es so, dass jedes Object auch vom Typ "Object" erbt. Somit ginge auch folgende Zuweisung:
code: |
1:
|
Object trompeter = new Trompeter(); |
|
Nutzt man nun letzteres Beispiel, so kann man nur die Eigenschaften und Methoden nutzen, welche in der Klasse Object bereitgestellt werden (z.B. toString()).
Analog kann die Methode "mundstueckWechseln()", die zu der Klasse Trompeter gehört eben auch nicht mehr genutzt werden, wenn der Trompeter einer Variable des Typs Musiker zugewiesen wird.
VG,
Karlito
|
|
07.02.2014 14:28 |
|
|
tigerbine
Grünschnabel
Dabei seit: 03.06.2007
Beiträge: 2
|
|
Zitat: |
Original von Karlito
Nutzt man nun letzteres Beispiel, so kann man nur die Eigenschaften und Methoden nutzen, welche in der Klasse Object bereitgestellt werden (z.B. toString()).
Analog kann die Methode "mundstueckWechseln()", die zu der Klasse Trompeter gehört eben auch nicht mehr genutzt werden, wenn der Trompeter einer Variable des Typs Musiker zugewiesen wird.
VG,
Karlito |
Dann habe ich es richtig verstanden, dass die beiden Deklarationen nicht äqivalent sind. Ich wunderte mich, dass in den java Dateien zum Buch eben die andere Deklaration als im Buch war. Aber so habe ich ja wieder was gelernt.
Danke
|
|
07.02.2014 15:08 |
|
|
tigerbine
Grünschnabel
Dabei seit: 03.06.2007
Beiträge: 2
|
|
Folgende Situation, gob gesagt:
code: |
1:
2:
3:
4:
5:
|
class A{
method a() {} }
class B extends class A {
} |
|
Nun erbt B ja von A. Wie muss ich die Methode a dann aufrufen? Mit super.a() oder this.a()?
Würde sie dann in Fall 2 überhaupt was in B finden, oder weil sie nichts findet in A nach der Methode suchen?
|
|
07.02.2014 19:29 |
|
|
tigerbine
Grünschnabel
Dabei seit: 03.06.2007
Beiträge: 2
|
|
Zitat: |
Original von eulerscheZahl
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
|
public class Main {
public static void main(String[] args) {
A a = new A(); B b = new B();
a.a(); //Ausgabe: a()
b.a(); //Ausgabe: a()
|
|
|
D.h. ich kann auf "a" auf beiden wegen zugreifen, auch wenn sie nicht in b explizit implementiert ist (was ja ein überschreiben wäre?) Sucht der compiler dann einfach eine Ebene höher, ob er dort die Methode a findet?
Danke dir.
|
|
07.02.2014 20:45 |
|
|
|