Java: readDouble-Methode?
Moin,
folgender Code funktioniert nicht:
public class In {
public static void main(String[] args) {
System.out.println(readDouble(" "));
}
private static double[] readDouble(String string) {
return readDouble(" ");
}
}
Ich bin Anfänger und habe bisher nur die Scanner-Methode benutzt.
Fehlercode (in Zeile 10):
Exception in thread "main" java.lang.StackOverflowError
--
MfG L
5 Antworten
Du sollst keine eigene Methode schreiben, sondern eine bereits vorhandene Klasse nutzen.
Binden Sie die „IO-Klasse“ In.java in Ihr Projekt ein.
Wie du die erforderlichen Daten nun in dein Projekt bekommst, ist einerlei. Entweder du kopierst die Datei ins Projektverzeichnis (vermutlich wird sie dann schon erkannt), du nutzt die Import-Funktion der IDE (siehe hier bspw. für Eclipse) oder du legst eine neue Klasse In an und kopierst den Inhalt der vorgegebenen In-Klasse einfach nur in diese herüber.
Wie die readDouble-Methode funktioniert, wird dann auch am Code oder mithilfe deiner Schulmaterialien ersichtlich werden. Ich vermute, dass der String, der übergeben wird, eine Art Einleitungstext für den Nutzer ist. Heißt, im Programm sieht es dann so aus:
// main:
double number = In.readDouble("Bitte geben Sie eine Zahl ein:");
Alles Weitere sollte dann kein Problem mehr für dich darstellen.
Was spricht denn dagegen, einen Scanner zu benutzen? readDouble etc. benutzt man soweit ich weiß nur bei InputStreams.
Binden Sie die „IO-Klasse“ In.java in Ihr Projekt ein.
Statt hart codierter Werte möchten wir die Zahlen für Gewicht und Größe interaktiv über die Konsole einlesen.
Hierzu verwenden wir die IO-Methode In.readDouble(“Bitte Wert für … eingeben“);
geht um einen BMI Rechner. mit scannen ist das in 2min runter aber ich raff dieses readDouble nicht
Und hast du diese IO Klasse eingebunden? Falls ja, kannst du (so wie ich das interpretiere) dann statt des Scanners IO.readDouble() benutzen.
Ja dann musst du die Klasse IO importieren... Eine "offizielle" IO Klasse mit solchen Methoden gibt es nicht, also wird euer Lehrer/Dozent/was auch immer die wahrscheinlich selber programmiert und euch zur Verfügung gestellt haben.
inwiefern importieren? ich kann diese IO-klasse in java öffnen, das wars. da stehen dann einige methoden drin.
Wenn diese Klasse im gleichen Paket ist wie deine Klasse, sollte das eigentlich schon reichen
Du rufst mmn mit dem return die Funktion readDouble() mit dem Parameter "" wieder neu auf. Des ist quasi ne Endlosschleife, deswegen stack overflow. Bin aber bei Java etwas aus der Übung.
ja aber dann müsste ich ja eine variable erstellen in der ich den wert der durch readDouble geholt wurde speichere, um DIE dann zu returnen oder!?
ReadDouble holt keinen Wert, woher auch. Das bekommt nur den Parameter vom Funktionsaufruf.
readDouble()
Liest eine
Double
zahl von der Tastatur ein.
steht so in einem pdf einer HS verstehe das nicht ganz..
Wenn du das "" zurück haben willst, dass hast du ja im Aufruf übergeben und im String string gespeichert. Versuche mal return string
Nein, tut sie nicht.
Du hast die Funktion ja selbst geschrieben. Die tut nur das was du da reinschriebst.
Also was du bis jetzt gemacht hast, sysout ruft readDouble auf und übergibt die gänsefüße an die methode readD., readD ruft sich über das return immer wieder selber auf, das ist eine rekursion ohne abbruchsbedingung.
ja ich verstehe die grundidee davon glaube ich nicht..
https://www.tutorialspoint.com/java/io/datainputstream_readdouble.htm
Bei dem Kommentar
// create new data input stream
Die Zeilen darunter, da ist ein Beispiel.
hab kein eclipse auf dem tablet und kann das jetzt nicht selber ausprobieren.
Was soll die methode den tun? Deine readDouble Methode macht nichts weiter als sich selbst unendlich oft aufzurufen. Weil sie sich unendlich oft selbst aufruft hast du einen Stack overflow.
Wenn ich nicht weiß was die Methode tun soll, und die Methode aktuell rein gar nichts tut kann ich dir nicht helfen.
also eigentlich soll sie einzig und allein eine eingabe ermöglichen
bzw eine zahl der tastatr einlesen aber das hört sich für mich sehr ähnlich an
Na dann musst du da einen Scanner implementieren oder so. Gibt ja z.B. java.util.Scanner.nextDouble(), oder du liest ne Zeile ein und parst selbst.
Die Methode hast du ja selbst geschrieben, die tut auch nur was du da reinschriebst. Und aktuell tut sie halt nichts.
Richtig. Leider bringen mich solche Antworten der Lösung nicht näher.
Ja dann solltest du uns aber die Aufgabe zeigen. Denn aktuell tut deine Methode nichts, also schwer zu helfen.
einen Bmi rechner statt hard coded, interaktiv gestalten. also gewicht und größe selber eingeben können. mit IO methode.
Ja dann ist es doch klar. Dann musst du in die Methode einen scanner, input stream Oder so einbauen.
Du solltest eine Methode haben die die Werte einliest, und eine die rechnet und ausgibt.
hab ich auch schon überlegt,falls das wirklich der fall ist, dient heute abend das Strick. 3 stunden versucht das readDouble als eingabeaufforderung zu schreiben
Du kannst auch einen buffered reader Input stream nehmen.
Aber ein Scanner macht mehr Sinn imho.
jou den buffered muss man glaube ich nehmen..
Was um alles in der welt willst du machen die methode ergibt kein sinn
Statt hart codierter Werte möchten wir die Zahlen für Gewicht und Größe interaktiv über die Konsole einlesen.
Hierzu verwenden wir die IO-Methode In.readDouble(“Bitte Wert für … eingeben“);
es geht um einen bmi rechner
nutzung der IO methode ist verbindlich :)
Warum hast du das geschrieben
private static double[] readDouble(String string) {
return readDouble(" ");
}
stand so ähnlich im skript, hat nicht funktioniert ergo hab ich es verzweifelt versucht umzuändern
Ok also erstmal das ist ne dauerschleife deswegen stackoverflow
Aber du kannst den teil doch einfach weglassen da es doch schon die methode gibt
Du brauchst auserdem einen inputstream
Ließ mal hier https://www.tutorialspoint.com/java/io/datainputstream_readdouble.html
funktioniert nicht.. ich werde mich jetzt erstmal abmachen, vielleicht raff ichs ja morgen. Danke!
Statt hart codierter Werte möchten wir die Zahlen für Gewicht und Größe interaktiv über die Konsole einlesen.
Hierzu verwenden wir die IO-Methode In.readDouble(“Bitte Wert für … eingeben“);
das ist die konkrete aufgabenstellung. der bmi rechner soll einfach den bmi ausrechnen (lul) und nicht hardcoded sondern eben interaktiv nutzbar sein => gewicht und größe selber eingeben können übers terminal
verpflichtend in einer aufgabe... leider ohne erklärung