# Modulo Operator Java?



## HPasch (24. September 2013)

Hey Leute!

Vorweg muss ich erwähnen, dass ich extremer Anfänger bin im Umgang mit Java, also nehmt mir grundlegende Falschaussagen bitte nicht übel. Ich habe die Aufgabe bekommen, mithilfe des Modulo Operators eine eingegebene Sekundenzahl in Jahre, Tage, Stunden und Sekunden zu zerlegen. Mein bisheriger Fortschritt sieht so aus (Ich möchte bitte keine Komplettlösung, lediglich Tipps wie ich weiterkomme)

```
import java.util.Scanner;


public class Programm {

	public static void main(String[] args){
	
		Scanner sc = new Scanner(System.in);
		System.out.println("Zahl in Sekunden:");
		long i = sc.nextLong();
		System.out.println(i + " Sekunden entsprechen:");
		
	
		long x = i % 31536000;
		System.out.println(x + "Jahre(n)");
	}
}
```
Lasse ich mir jetzt für eine bestimmte Sekundenzahl die Jahre ausgeben, kommt was völlig falsches heraus. "%" sollte aber doch der Modulo Operator sein (sprich er teilt die Sekunden durch 31536000 (soviele Sekunden hat ein Jahr) und gibt mir dann den rest aus...) Ich dachte wenn ich mir erstmal nicht den Rest ausgeben lasse (da ich nicht genau weiß wie) teilt er zumindest richtig und ignoriert den Rest einfach. Wende ich den Modulo Operator überhaupt richtig an? Muss ich den vorher irgendwie definieren.

Wie gesagt es tut mir Leid wenn ich mich völlig falsch ausdrücke, aber ich bin erst in der 3ten woche des ersten Semesters und hab bei 0 angefangen. Hoffe ihr könnt mir auf die Sprünge helfen! 

Mfg


----------



## Cromon (24. September 2013)

Hallo HPasch

Überlege dir folgendes:
Wenn du 100 Sekunden hast und ein Jahr hat 15 Sekunden wie viele Jahre hast du dann? Und was hast du gerechnet? Benötigst du dazu überhaupt den Modulooperator? Oder einen anderen Operator?

Als nächstes überleg dir mal wie viele Sekunden dann noch übrig bleiben im aktuellen Jahr, was rechnest du dazu? Benötigst du dazu den Modulooperator?

Viele Grüsse
Cromon


----------



## sheel (24. September 2013)

Hi und Willkommen bei tutorials.de,

das Modulo wird von dir zwar richtig angewendet (und es tut auch, was es tun soll),
aber du hast einen Denkfehler:
Wenn du die Jahre haben willst brauchst du nicht den Rest der Division,
sondern das eigentliche Ergebnis.

Am Beispiel Minuten, zB. für 400 Sekunden:
400 / 60 = 6 komma irgendwas (Kommastellen gibts ja im ganzzahligen long nicht, also 6)
400 % 60 = 40
Also 6 Minuten, und noch 40 übriggebliebene Sekunden dazu.

edit: Wie Cromon schon sagt/andeutet:
Du hast ja mehrere Stufen im Ganzen.
Sekunden, Minuten, Stunden, Tage, Jahre
Zuerst die Sekunden in Minuten und Sekunden rechnen.
Dann die Minuten zu Stunden+Minuten...
Da kommt % und / vor


----------



## HonniCilest (24. September 2013)

Du kannst auch "von oben" anfangen z.B.:

```
rest = 49054248;
jahre = rest / 315360000;
rest = rest % 315360000;
//...
```


----------



## HPasch (24. September 2013)

Danke für die schnellen Antworten!
Ja jetzt wo Ihr es sagt, versteh ich meinen Denkfehler 
Problem war wohl, dass ich garnicht genau wusste, was der Modulo Operator überhaupt macht. 

Also könnte ich jetzt einfach meine Sekunden "i" durch die Sekunden im jahr teilen ( mit / ), das Ergebnis ausgeben lassen und dann nochmal den Modulo Operator für "i" benutzen und mit dem Rest weiterrechnen usw.?

Edit: Kleine Frage noch am Rande. Eigentlich soll ich die IOTools für Ein/Ausgabe benutzen, allerdings kriege ich bei eclipse deswegen dauernd Fehlermeldungen. Habe also einfach scanner benutzt. Weiß jemand woran das mit den IOTools liegt?


----------



## sheel (24. September 2013)

HPasch hat gesagt.:


> Problem war wohl, dass ich garnicht genau wusste, was der Modulo Operator überhaupt macht.


Dann weißt du es jetzt ja 
Da es bei int/long... keine Kommastellen gibt
hat man beim Dividieren wieder Ergebnis+Rest,
wie in der Grundschule/Volkschule.
/ liefert das Ergebnis, % den Rest.



HPasch hat gesagt.:


> Also könnte ich jetzt einfach meine Sekunden "i" durch die Sekunden im jahr teilen ( mit / ), das Ergebnis ausgeben lassen und dann nochmal den Modulo Operator für "i" benutzen und mit dem Rest weiterrechnen usw.?


Genau.
Das, was nach den Jahren an Sekunden übrig bleibt ist garantiert weniger als ein Jahr,
da kann dann das Monat (oder Tag oder ...) als Nächstes rausextrahiert werden.
Nur einen anderen Faktor zum Rechnen nehmen (wieviel Sekunden ein Monat eben hat).



HPasch hat gesagt.:


> Edit: Kleine Frage noch am Rande. Eigentlich soll ich die IOTools für Ein/Ausgabe benutzen, allerdings kriege ich bei eclipse deswegen dauernd Fehlermeldungen. Habe also einfach scanner benutzt. Weiß jemand woran das mit den IOTools liegt?


Welche Fehlermeldung?

Welche IOTools? (Google liefert verschiedene, von verschiedenen Unilehrern etc.)

Hast du eine Jar-Datei dafür bekommen oder etwas anderes?


----------



## HPasch (24. September 2013)

sheel hat gesagt.:


> Welche Fehlermeldung?
> 
> Welche IOTools? (Google liefert verschiedene, von verschiedenen Unilehrern etc.)
> 
> Hast du eine Jar-Datei dafür bekommen oder etwas anderes?



Die Fehlermeldung lautet "IOTools can not be resolved". Allerdings habe ich auch nur eine java- Datei bekommen aus der ich verschiedene Methoden entnehmen kann.

wie zB. IOTools.read.Integer() ... was ich hier ja statt scanner gebrauchen hätte können. Habe aber auch schon gelesen, dass ich wenn ich diese IOTools in eclipse verwenden will zuerst eine Jar-Datei in meinen workspace ordner legen muss oder so. Aber ist vorerst auch nicht so dringlich.

Hab die Aufgabe jedenfalls geschafft. Danke Euch!


----------

