1/1=1.0

Status
Nicht offen für weitere Antworten.
M

muh2k4

Gast
Hallo :)

Ich programmiere seit einer Woche ein bisschen Java. Mir ist bewusst, dass bei der Aufgabe 1/1= 1.0 rauskommt, wenn die erste oder die zweite 1 (oder beide) als Gleitpunktzahl deklariert sind.
Nun ja, ich wollte ein Programm schreiben, dass ganze Zahlen als Ganzzahlen ausgibt und Kommazahlen als Gleitpunktzahlen.
Das klappt auch super! Aber meiner Frage ist, warum bei 1/1, 2/2, etc. 1.0 rauskommt und nicht 1. Wenn man sich den Quellcode anguckt sieht man, dass ich mit "Rest" arbeite, und die genannten Quotienten wohl keinen "Rest" haben sollte, oder?
Es ist kein großes Problem, aber es ist meiner Meinung nach unlogisch, wenn man sich mein Pogramm anguckt. Bevor ich jetzt viel erkläre, seht es euch an, ihr kennt euch damit bestimmt besser aus :)

(Ich gehe davon aus, dass man bei diesem Programm nur ganze Zahlen eintippt)

import java.io.*;
class ohm
{
public static void main (String[] args) throws IOException
{
InputStreamReader InStream = new InputStreamReader (System.in);
BufferedReader buffy = new BufferedReader (InStream);

int U,R,k;
double I;
String eingabe;

System.out.println("Geben sie die Spannung ein!");
eingabe=buffy.readLine();
U=Integer.parseInt(eingabe);

System.out.println("Geben sie nun den Widerstand ein!");
eingabe=buffy.readLine();
R=Integer.parseInt(eingabe);

I=(U+0.0)/R;
k=U/R;
if (I%2!=0)
System.out.println("Die Stromstärke betraegt bei einer Spannung von "+U+" Volt und "+R+" Ohm, "+I+" Ampere!");
else

System.out.println("Die Stromstärke betraegt bei einer Spannung von "+U+" Volt und "+R+" Ohm, "+k+" Ampere!");
}}


Und das ist die Ausgabe wenn ich für Spannung 2 und Widerstand 2 eingebe:

C:\Users\muh2k4\Desktop\Java>java ohm
Geben sie die Spannung ein!
2
Geben sie nun den Widerstand ein!
2
Die Stromstõrke betraegt bei einer Spannung von 2 Volt und 2 Ohm, 1.0 Ampere!

C:\Users\muh2k4\Desktop\Java>
 

didjitalist

Bekanntes Mitglied
das ist schon ziemlich genau 1, aber double wird standardmässig halt mit mindestens einer nachkommastelle formatiert.
 
M

muh2k4

Gast
Aber ich habe doch bei der Rechnung k=U/R keinen einzigen double benutzt
 

Wildcard

Top Contributor
I=(U+0.0)/R;
int + double > double
double/int > double

Variablen schreibt man übrigens klein, Klassen groß
 

diggaa1984

Top Contributor
die Sache is: ((1.0 % 2) == 1) != 0 daher wird die bedingung wahr und blubb gibst I aus

du prüfst nich auf Ganze Zahlen sonden auf Gerade Zahlen
 
M

muh2k4

Gast
diggaa1984 hat gesagt.:
die Sache is: ((1.0 % 2) == 1) != 0 daher wird die bedingung wahr und blubb gibst I aus

du prüfst nich auf Ganze Zahlen sonden auf Gerade Zahlen


Oh man, dank dir. Das ist echt ein blöder Denkfehler.

P.S.: mit %1 funktionierts ;)



-closed-
 
Status
Nicht offen für weitere Antworten.

Oben