Dein Erklärungsstil find ich köstlich! Macht riiiiiiichtig Spaß dir zuzuhören. :D Fühl mich ein wenig zurückversetzt in meine Kindheit.. *hust Löwenzahn hust hust* :D Like und Abo dagelassen!
Sehr schön erklärt! Hätte man nicht auch einfach i-- anstatt i=-1 verwenden können? Das erscheint mir besser, da so die Schleife nicht jedesmal von vorne beginnt.
Wenn ich von 3.23 (double) 2.47 abziehe ist das Ergebnis laut Java 0.7599999999999998. Woran liegt das? Wenn ich das ganze mit Float als datentyp mache funktioniert es.
lucky19 Das ist ein ganz übliches Problem mit Fließkommaarithmetik in der Informatik und zwar in den meisten Programmiersprachen, nicht nur in Java. Falls du eine Rechnung machst, für die dieses Ergebnis nicht ausreichend genau ist, benutze die Klasse BigDecimal. Sie erweitert den Speicherplatz für deine Fließkommazahl je nach Bedarf und relativ dynamisch, Double dagegen bleibt in seinen paar (waren es 64?) Bit und da ist auf jeden Fall Schluss.
Das liegt an der Art und Weise, wie die Kommazahl im Computer abgespeichert wird. (Wikipedia-Eintrag dazu: de.wikipedia.org/wiki/Gleitkommazahl ) Um Gleichheit zu überprüfen, ist es besser "Math.abs(zahl1 - zahl2) < 1e8" oder so zu verwenden, anstatt mit == zu arbeiten.
Hey hoffe es ist nicht zu spät und niemand liest mehr meine Frage: Ist es schlimm, dass unsere Methode getWechselGeld jetzt static ist? Normalerweise sind getter ja nicht statisch.. Gibt es noch eine andere Möglichkeit, das Problem zu lösen, sodass die Methode getWechselGeld nicht static ist?
Also bei diesem Tutorial bin ich völlig abgehängt. Dabei ist das Enum nicht das Thema, sondern eher die LinkedList. Wieso kann man hier einfach Value schreiben? for (int i = 0; i >= values().length; i++) { ... Auch hier: Muenze M1 = values()[i];
Ich weiß nicht ob du hier noch Kommentare liest, allerdings ist bei meinem Programm, was ich zu 100% abgeschrieben hab, etwas merkwürdig. Es wirft nämlich das Wechselgeld immer eins zu klein raus (also ich gebe 763 ein und nur 762 werden ausgeworfen). Woran könnte das liegen?
Naja letztendlich ist Muenze intern doch eine Klasse und die einzelnen Münzen public static Instanzen die automatisch erzeugt werden ^^ Ach habe gerade gehört du bist an der Uni - was studierst du genau bzw. wo? :D
Chemie wollte ich früher auch studieren, jetzt mache ich nur Informatik. Wie kannst du eigentlich zwei Fächer gleichzeitig studieren? Auf Lehramt? Oder gibt es ein Chemie-Informatik-Mischfach?
Static heißt, dass es eine statische Methode ist. Dadurch kannst du auf die Methode durch *Klassenname.Mehode();* zugreifen. Wenn diese Methode nicht statisch wäre, dann könntest du die Methode nur mithilfe eines zuvor erstellten Objektes aufrufen.
Hallo Debukkit ich habe eine wichtige Frage, und zwar beim Bukkit Plugin programmieren: if(cmd.getName().equalsIgnoreCase("kill")){ if(p != null){ if(p.hasPermission("tutorial.kill")){ if(args.length != 1){ return false; } !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Player zielSpieler = this.getServer().getPlayer(args[0]); !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! if(zielSpieler.isOnline()){ zielSpieler.setHealth(0); }else{ p.sendMessage("Spieler nicht online."); }
return true; } } else { sender.sendMessage("Dieses Kommando wird zurzeit nicht für die Konsole unterstützt."); } } und zwar ist dort die mit ausrufen geschmückte zeile kommt bei .getPlayer(args[0] das diese Methode zu alt ist und die surpresswarning oder wie die heißt hilft beim quick fix auch nicht. bitte um hilfe.
Gebes Noch existiert diese Methode. Du kannst sie benutzen und es funktioniert. Irgendwann solltest du allerdings statt des Spieler-Namens eine UUID angeben. Ich habe dazu ein Video veröffentlicht, das zeigt, wie man Spieler-Namen über die Mojang-Server der entsprechenden UUID zuordnet.
Dein Weg ist aber um einiges weniger performant. Loops sind so mit das Schlimmste, was du in Java gegen Performance machen kannst und du verwendest hier 2 Schleifen ineinander...
curryWURSCHT Schwachsinn. Wenn man Looks richtig verwendet wird die Performance nicht verschlechtert. Und im Video hat es auch eine for Schleife benutzt. Eine while Schleife wäre besser gewesen.
Dein Erklärungsstil find ich köstlich! Macht riiiiiiichtig Spaß dir zuzuhören. :D Fühl mich ein wenig zurückversetzt in meine Kindheit.. *hust Löwenzahn hust hust* :D
Like und Abo dagelassen!
Du hättest doch die einfachere for-Schleife so lassen können und if mit while ersetzen können.
Guter Punkt!
hab ich auch gedacht (min 13:30)
Wer aber auf Performance legt, der sollte den Weg den DeBukkit hier präsentiert hat wählen.
Weshalb?
Ist doch das gleiche nur kürzer geschrieben
Sehr schön erklärt! Hätte man nicht auch einfach i-- anstatt i=-1 verwenden können? Das erscheint mir besser, da so die Schleife nicht jedesmal von vorne beginnt.
Ja das wäre auch gegangen und wäre auch effizienter.
TPRammus Verdammt! Alles klar, leider nicht bedacht.
Wenn ich von 3.23 (double) 2.47 abziehe ist das Ergebnis laut Java 0.7599999999999998. Woran liegt das? Wenn ich das ganze mit Float als datentyp mache funktioniert es.
lucky19 Das ist ein ganz übliches Problem mit Fließkommaarithmetik in der Informatik und zwar in den meisten Programmiersprachen, nicht nur in Java. Falls du eine Rechnung machst, für die dieses Ergebnis nicht ausreichend genau ist, benutze die Klasse BigDecimal. Sie erweitert den Speicherplatz für deine Fließkommazahl je nach Bedarf und relativ dynamisch, Double dagegen bleibt in seinen paar (waren es 64?) Bit und da ist auf jeden Fall Schluss.
Ok, danke!
Das liegt an der Art und Weise, wie die Kommazahl im Computer abgespeichert wird. (Wikipedia-Eintrag dazu: de.wikipedia.org/wiki/Gleitkommazahl )
Um Gleichheit zu überprüfen, ist es besser "Math.abs(zahl1 - zahl2) < 1e8" oder so zu verwenden, anstatt mit == zu arbeiten.
Ich hab da nen dummen Fehler gemacht und das Minus vergessen! Es sollte "Math.abs(zahl1 - zahl2) < 1e-8" heißen...
Darf ich dein "Simple Server Client" in mein Projekt einbinden und anpassen? :)
SpoKaPh Selbstverständlich, allerdings entsprechend der Lizenz nur mit Attribution meiner Wenigkeit.
Okay danke :D
Hey hoffe es ist nicht zu spät und niemand liest mehr meine Frage: Ist es schlimm, dass unsere Methode getWechselGeld jetzt static ist? Normalerweise sind getter ja nicht statisch.. Gibt es noch eine andere Möglichkeit, das Problem zu lösen, sodass die Methode getWechselGeld nicht static ist?
Also bei diesem Tutorial bin ich völlig abgehängt. Dabei ist das Enum nicht das Thema, sondern eher die LinkedList.
Wieso kann man hier einfach Value schreiben? for (int i = 0; i >= values().length; i++) { ...
Auch hier: Muenze M1 = values()[i];
Ich weiß nicht ob du hier noch Kommentare liest, allerdings ist bei meinem Programm, was ich zu 100% abgeschrieben hab, etwas merkwürdig. Es wirft nämlich das Wechselgeld immer eins zu klein raus (also ich gebe 763 ein und nur 762 werden ausgeworfen). Woran könnte das liegen?
Kannst du mir deinen Code einmal schicken?
@@DeBukkIt hier die Klasse EnumsTest
import java.util.LinkedList;
public class EnumsTest {
public static void main(String[] args) {
LinkedList wechselgeld = Muenze.getWechselgeld(526);
for (Muenze m : wechselgeld) {
System.out.println(m);
}
}
}
und hier die Klasse Muenze
import java.util.LinkedList;
public enum Muenze {
zweiEuro(200), einEuro(100), fuenfzigCent(50), zwanzigCent(20), zehnCent(10), fuenfCent(5), zweiCent(2), einCent(1);
private int wert;
Muenze(int wert) {
this.wert = wert;
}
public int getWert() {
return wert;
}
public static LinkedList getWechselgeld(int wertInCent) {
LinkedList wechselgeld = new LinkedList();
for (int i = 0; i < values().length; i++) {
Muenze aktuelleMuenze = values()[i];
if(aktuelleMuenze.getWert() < wertInCent) {
wechselgeld.add(aktuelleMuenze);
wertInCent = wertInCent - aktuelleMuenze.getWert();
i--; // hier hab ich beide Möglichkeiten getestet
}
}
return wechselgeld;
}
}
@@vanessaruth9482 if(aktuelleMuenze.getWert()
Naja letztendlich ist Muenze intern doch eine Klasse und die einzelnen Münzen public static Instanzen die automatisch erzeugt werden ^^
Ach habe gerade gehört du bist an der Uni - was studierst du genau bzw. wo? :D
Er sagte nur, dass es eine Übungsaufgabe von einer Universität handelt.
Er hat nicht davon geredet, dass er jetzt gerade an einer Universität ist.
Er ist an der uni und studiert chemie und informatik; soviel ich weiss...
Salted Broccoli Korrekt! Chemie und Informatik - beides sehr interessante Wissenschaften und mindestens einen Bachelor of Science wert.
Chemie wollte ich früher auch studieren, jetzt mache ich nur Informatik. Wie kannst du eigentlich zwei Fächer gleichzeitig studieren? Auf Lehramt? Oder gibt es ein Chemie-Informatik-Mischfach?
Du kannst Chemie sicherlich auch als Nebenfach wählen :)
Sehr hilfreiches Video!!!
was macht static ich verstehe es immernoch nicht ?
Static heißt, dass es eine statische Methode ist.
Dadurch kannst du auf die Methode durch *Klassenname.Mehode();* zugreifen.
Wenn diese Methode nicht statisch wäre, dann könntest du die Methode nur mithilfe eines zuvor erstellten Objektes aufrufen.
TPRammus also wenn sie nicht statisch ist dann kann ich nur Klaus.Methode ();
Klaus ist ein neues Objekt
Ja richtig.
Es ist so, dass wenn man statische Methoden ändert, das überall geändert wird, oder?
Definiere dieses "ändern" bitte etwas genauer.
Sooo viel besser als das von "The Morpheus Tutorials".... und du hast weniger likes : |
Super, danke :)
Hallo Debukkit ich habe eine wichtige Frage,
und zwar beim Bukkit Plugin programmieren:
if(cmd.getName().equalsIgnoreCase("kill")){
if(p != null){
if(p.hasPermission("tutorial.kill")){
if(args.length != 1){
return false;
}
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Player zielSpieler = this.getServer().getPlayer(args[0]);
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
if(zielSpieler.isOnline()){
zielSpieler.setHealth(0);
}else{
p.sendMessage("Spieler nicht online.");
}
return true;
}
} else {
sender.sendMessage("Dieses Kommando wird zurzeit nicht für die Konsole unterstützt.");
}
}
und zwar ist dort die mit ausrufen geschmückte zeile kommt bei .getPlayer(args[0] das diese Methode zu alt ist und die surpresswarning oder wie die heißt hilft beim quick fix auch nicht. bitte um hilfe.
Gebes Noch existiert diese Methode. Du kannst sie benutzen und es funktioniert. Irgendwann solltest du allerdings statt des Spieler-Namens eine UUID angeben. Ich habe dazu ein Video veröffentlicht, das zeigt, wie man Spieler-Namen über die Mojang-Server der entsprechenden UUID zuordnet.
Danke für die Antwort :) Ich feiere deine Videos
Gebes th-cam.com/video/VLg2TCjqxIc/w-d-xo.html
Der Downloadlink ist allerdings defekt. Ich repariere ihn zeitnah.
Viele Dank DeBukkit
public LinkedList getWechselgeld(int wertInCent) {
LinkedList Muenzen = new LinkedList();
for (WertEnum m : WertEnum.values()) {
while (m.getWert()
Ich habe einfach
while(wertInCent > 0) {
for(Muenze aktuelleMuenze : Muenze.values()) {
if(wertInCent >= aktuelleMuenze.getWert()) {
wertInCent -= aktuelleMuenze.getWert();
wechselgeld.add(aktuelleMuenze);
break;
}
}
}
geschrieben. Empfand ich als einfacher.
So hab ich's auch gemacht :)
Ist berichtigt, habe hier einfach ein = vergessen.
Dein Weg ist aber um einiges weniger performant. Loops sind so mit das Schlimmste, was du in Java gegen Performance machen kannst und du verwendest hier 2 Schleifen ineinander...
curryWURSCHT Schwachsinn. Wenn man Looks richtig verwendet wird die Performance nicht verschlechtert. Und im Video hat es auch eine for Schleife benutzt. Eine while Schleife wäre besser gewesen.