Java java-rechner - geteilt rechnen

xXGame OverXx

Lt. Junior Grade
Registriert
Jan. 2008
Beiträge
339
hi cbler,

Ich habe grade mit java angefangen, mit einem simplen rechenprogramm um genau zu sein.
+, -, *, nur bei der division wird gerundet; etwa 3/2=1, wie bekommen ich es hin das mir
das ganze als 1.5 anzeigt?
Code:
/*
  * 06.02.09
  */
  
public class calculating4geteilt{
	
	public static void main (String[] args){
		int x, y, result;
		
		System.out.println("Enter dividend 1!");
		x = Input.readInt();
		System.out.println("Enter dividend 2!");
		y = Input.readInt();
		
		result = x / y;
		
		System.out.print("print out result: ");
		System.out.println(result); 	
	} 
}
 
x, y, und result sind Integer-Größen. Das heißt "Ganzzahlen". Es gibt keine Nachkommastellen. Jede Berechnung mit Integerzahlen schneidet am Ergebnis die Nachkommastellen ab.
3 / 2 = 1.5 wird zu 1.

Du kannst mit dem Typ float oder double anstelle von int arbeiten, wenn du Nachkommastellen möchtest.
 
vielen dank ihr beiden! :D:D
 
Zum Thema Fließkommazahlen:

Deklariere deine Variablen "x,y,result" nicht als int(Integer) sondern als float bzw. double. Aber pass auf, bei größeren Zahlenwerten gibt es bei der Benutzung von diesen beiden Datentypen Rundungsfehler! Achte dann auch drauf dass du nicht mehr bei "Input.readInt" ein Integer einließt, sondern ein float bzw. double, je nachdem welchen Zahlenbereich/Wertebereich du abdecken willst.

Zur Verdeutlichung eine kleine Übersicht:

float Bit: 32 Wertebereich: 1.5E-45 .. 3.4E38 Genauigkeit: 7- 8 Stellen
double Bit: 64 Wertebereich: 5.0E-324 .. 1.7E308 Genauigkeit: 15-16 Stellen
 
jezt habe ich wieder neue aufgaben bekommen und schon wieder ein problem, diemal mit dem compiler
Aufgabe 1: Speicher dein Programm rechnen unter dem Namen rechnen2.java erneut ab und verändere die Kopie so, dass auch mit Dezimalzahlen gerechnet werden kann. Benutze als Datentyp double und zur Eingabe von Dezimalzahlen Input.readDouble();
lautet die aufgabe, als ich int zu double gemacht habe, habe ich das nur oben bei
|int x, y, result;| verändert, jetzt wo ich das ganze auch im eingabebereich verändert habe,
mein der compiler auf einmal da wäre ein fehler im inputbereich. (??)
Code:
public class rechnen2{
	
	public static void main (String[] args){
		double x, y, result;
		
		System.out.println("Enter addend 1!");
		x = Input.readDouble();
		System.out.println("Enter addend 2!");
		y = Input.readDouble();
		
		result = x + y;
		
		System.out.print("print out result: ");
		System.out.println(result); 	
	} 
}


x = Input.readDouble();
^
y = Input.readDouble();
^
selbst wenn ich das double wieder zu einem int mache kommt der fehler!
 
Zuletzt bearbeitet:
Versuch bitte nicht die Fehlermeldung selbst zu übersetzten sondern poste sie einfach. Und ist das auch die ganze Datei? Input ist z.B. nicht definiert.
 
Das ist genau der Punkt Darii.... Was er da macht ist ein Objektaufruf der vorher irgendwo instanziiert werden muss... Wäre sinnvoll den kompletten Code zu pasten....

Achja dasselbe wie oben:
System.out.print("print out result: ");
System.out.println(result);

ist das gleiche wie:
System.out.print("print out result: " + result);

Denkbar wäre es auch das Einlesen der Werte über vorgefertigte Methodenpakete zu realisieren... Beispiel hierfür wären die IOTools vom Herrn Ratz. Ist nen nettes Package, dass einfach zu importieren ist und zuverlässig arbeitet...
Eine weitere Möglichkeit würde sich mit Hilfe eines Stream anbieten. Die Frage ist allerdings ob das ein bisschen zu weit ausholt.
 
sorry
die fehlerausgabe wollte sich nicht kopieren lassen
also hier ein screen
 

Anhänge

  • Magical Snap - 2009.02.16 18.19 - 002.jpg
    Magical Snap - 2009.02.16 18.19 - 002.jpg
    86,7 KB · Aufrufe: 1.535
Die Fehlermeldung bedeutet nur das es den String "Input" nicht gibt...

Versuchs mal in dem du einfach

Input = "";

einfügst. Am besten nach der Zeile: double x, y, result;
 
@darcoda
Das ist Quatsch.

@xXGame OverXx
Die Fehlermeldung sagt aus, dass die Klasse Input unbekannt ist. Ich nehme an, das ist die Klasse, in der der InputReader gekapselt ist? Ist sie im selben package wie deine rechnen2-Klasse? Wenn nein, hast du eventuell den Import vergessen. Oder die Klasse ist nicht im Classpath.
Und ich vermute mal, readDouble() ist eine static-Methode?
 
@darcoda
Wie kommst du bitte auf diesen geistigen Dünnpfiff?

Back to topic:
Anfangs erstmal ne generelle Frage... Welche Entwicklungsumgebung nutzt du? - Rein interessehalber... Falls du da noch auf der Suche bist nach einer brauchbaren, kann ich dir Eclipse wärmstens empfehlen.
Hmm, irgendwie ist das strange.. Bei deinem Problem anfangs bin ich davon ausgegangen dass du eine separate Klasse "Input" implementiert hast, die das Einlesen der Werte für dich übernimmt... Aber scheinbar ist das nicht der Fall... Wäre dir dankbar mal deine Klassenstruktur hier zu posten, bzw. mal kurz nen UML Diagramm zu erstellen damit wir mal ein Überblick über deine Klassen, Methoden und die Kommunikation zwischeneinander bekommen.
 
ah doch ihr seid im recht!
mir wurde nun von nem kumpel die datei input.class zugesant,
jetzt funktionierts auch mit double
wieso muss aller anfang schwer sein?!
wie kommt man eig an solche erforderlichen dateien wenn man grade keinen hat der einem sowas zusendet?

@friestorm: ich benutze JOE und EditIt(hat ein freund von mir programmiert)
 
Zur Entwicklungsumgebung:

Die Programmierung deines Freundes in allen Ehren, aber wenn du wirklich vor hast dich intensiv mit Java zu beschäftigen und dabei auf eine top Entwicklungsumgebung nicht verzichten willst(und das willst du früher oder später auch nicht), dann würde ich dir wirklich http://www.eclipse.org/downloads/ ans Herz legen. Uns wurde es in den ersten Vorlesungen auch ans Herz gelegt, wobei jeder anfangs etwas skeptischt war... Letztendlich hat es uns alle überzeugt. Das Programm ist opensource und wird von IBM aktiv weiterentwickelt.

Ich hab das Gefühl dass du dich zu sehr auf etwas fixiert hast, ohne die Umstände richtig zu kennen. Aller Anfang ist schwer, keine Frage, dennoch würde ich dir eher empfehlen erstmal die Basics zu studieren bevor du dich an eine Parameterübergabe von Unterprogrammen machst. Unter Basics versteh ich unter anderem die Beziehung von Klassen und Objekten zueinander, die verschiedenen Möglichkeiten der Kommunikation zwischeneinander. Wenn du da was nachlesen willst, google mal nach "Java ist auch eine Insel openbook", bzw. besorg dir die Bände 1 und 2 vom Grundkurs Programmieren von einem Herrn Dietmar Ratz. Absolute geniale Bücher, die aber auch ihren Preis haben.

Wo du deine Dateien herbekommst ist eine gute Frage... Zunächst erstmal Butter bei die Fische: Erstmal solltest du wissen welche Dateien du überhaupt brauchst. Aber dazu siehe oben. Generell solltest du versuchen eine gewisse Strukturierung dir in deine Programmierung einzubauen, sprich für dich selbst Standards ausmachen, wie immer wiederkehrende Probleme zu lösen sind. In diesem Fall würden sich die von mir weiter oben schon angesprochenen IOTools zum Einlesen der Werte einlesen. Wenn mehr dazu wissen willst, pn mich einfach mal...

Ansonsten: learning by doing! :)
 
Gut ganz richtig war es nicht, dafür entschuldige ich mich mal.

Habe den Codeschnipsel nur schnell auf Arbeit überflogen.
Also in dem Fall hat die Klasse gefehlt. Hätte aber genau so der String sein können.

Aber schön wie man hier gleich eine auf den Deckel bekommt, nur weil man helfen möchte :>
Scheint aber in diesem Forum normal zu sein :D

Naja jedenfalls schön, das es nun geklappt hat!

P.S (Einige hier sollten auf ihre Wortwahl achten, denn im RL, wäre es was für Prügel!)
 
Hmmm, ne, der String hätte nicht fehlen können, da ein Objekt-/Klassenaufruf implementiert ist, der eine Methode der Klasse "Input" aufruft. Ausserdem macht es keinen Sinn zwei eingelesene Strings zu addieren...

Foren leben nunmal von produktiven und korrekten Beiträgen der User... Das ist nunmal so. Eine auf den Deckel bekommst du nie wenn du helfen willst, das sei mal vorne weg gesagt. Aber ich sag mal eine gewisse Ahnung von der Materie ist eine kleine, aber dennoch feine Voraussetzung um produktiv mitzuwirken. Also nimm dir nächstes mal lieber die 5 Minuten um dir den Code genauer anzusehen. :)

MfG Fire
 
Zurück
Oben