# kleines Programm für ungerade oder gerade Zahl.



## force93 (19. Okt 2009)

Hallo, ich habe letztens in der Schule den Programmierunterricht versäumt und habe im moment keine ahnung, wie ich die Hausübung machen soll. :S

Wir haben erst vor kurzem mit Java angefangen. Es ist also nichts weiter großes. Und heute sehe ich im Modle folgende Aufgabe vom Lehrer aufgegeben:

Erstellen Sie ein Programm, welches eine ganze Zahl einliest,
und dann testet ob es sich um eine gerade oder ungerade Zahl handelt.
Diese Information imklusive der eingebenen Zahl wird anschließend
auf der Konsole ausgegeben.

Könnts ihr mir da irgendwie helfen? Ich bräcuhte es recht dringend.

Edit: Ups, bin in der falschen Rubrick. Sry.
Mit freundlichen Grüßen,
Force93


----------



## HoaX (19. Okt 2009)

Ja und wo is da jetz das Problem? Beim Einlesen der Zahl? Beim Ausgeben? Beim Bestimmen ob gerade oder ungerade?


----------



## force93 (19. Okt 2009)

Also, mit "int" kann ich ja eine ganze Zahl schreiben.  Das ausgeben kann ich ( mit system.out.println...), aber wie schreibe ich die Funktion das ausgegeben wird ob es gerade oder ungerade ist?

Ich schreibe z.B int i= 1; 
Muss ich das mit "IF" und "else" machen?


----------



## HoaX (19. Okt 2009)

Da du eine Fallunterscheidung machen willst brauch du ein If-Else, ja.


----------



## force93 (19. Okt 2009)

Ok. Ich habe jetzt geschrieben:

public class TEST
{
    public static void main (String[] args)
    {
            int i = 1;
            if (.)
}

Mehr weiß ich jetzt auch nicht. <_<


----------



## xjCoder (19. Okt 2009)

Hi, 
bei der Unterscheidung Gerade/Ungerade könnte der Restwert-Operator 
	
	
	
	





```
%
```
 Dein Freund sein 

Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 2.5 Ausdrücke, Operanden und Operatoren


----------



## force93 (19. Okt 2009)

Mal ne frage, könnt es sein das mit gerade oder ungerade der Wahrheitswert gemeint ist? Also true oder false.
Hmm, es ist nur so, wir dürfen nicht mehr verwenden als des was wir im Unterricht lernen und bin mir ganz sicher das die anderen es mit dem Restwert-Operator noch nicht gelernt haben. :/


----------



## HoaX (19. Okt 2009)

Eine Unterscheidung läuft immer auf true/false hinaus. Das Modulo wirst du allemal brauchen um überhaupt allgemein feststellen zu können ob die Zahl gerade ist oder nicht. Du willst ja nicht die Werte 1,2,3,4,5,6,7,8,9,....321321323215799,.... bis unendlich alle einzeln abprüfen.

Welche Möglichkeiten gibt es denn für die eingegebene Zahl? Schau einfach ob sie gerade ist, wenn sie es nicht ist, ist sie zwangsläufig ungerade.


----------



## hdi (19. Okt 2009)

> Mal ne frage, könnt es sein das mit gerade oder ungerade der Wahrheitswert gemeint ist? Also true oder false.


Ganz sicher sogar, denn anders kannst du das gar nicht ausdrücken. Allerdings heisst das nicht unbedingt dass in deinem Code ein true oder false stehen muss. Aber intern kann eine Unterscheidung immer nur mit einem Wahrheitswert ermittelt werden..

```
if(i ist gerade){
    System.out.println(i + ": gerade!");
else{
    System.out.println(i + ": ungerade!");
}
```

Den Teil "i ist gerade" musst du nun noch durch einen Ausdruck ersetzen, der einen Wahrheitswert zurückliefert. Also zB ein Vergleich mit ==. zB ob der Restwert == 0 ist 

..ohne % ist das wohl nur über eine rekursive Methode lösbar, und ich denke nicht dass das verlangt ist. Aber ich kann mich auch irren, in Mathe bin ich ziemlich schlecht..


----------



## eRaaaa (19. Okt 2009)

hdi hat gesagt.:


> ..ohne % ist das wohl nur über eine rekursive Methode lösbar.



ne, nicht ganz, geht auch anders und ist fast genauso easy wie modulo


----------



## hdi (19. Okt 2009)

Mit Division? Hab kurz überlegt, wüsste aber nicht wie. Ansonsten nur noch mit Double und dann prüfen ob /2 == double.roundDown() oder sowas^^ Aber das werden sie ja bestimmt noch nicht durchgenommen haben.


----------



## Prismapanda (19. Okt 2009)

Mit dem Bitoperator & gings noch, aber ich will dem TO jetzt mal davon abraten, das verwirrt nur. Die mathematisch einleuchtendste Methode ist über die Module (%) Funktion.

```
public static void main(String[] args) {
		int[] testValues = { 0, 1, 2, 3, 4, 5, 56, 57, 108961, 10186536,
				Integer.MAX_VALUE };
		for (int i : testValues) {
			System.out.println(i+": "+isEven(i));
		}
	}

	public static boolean isEven(int i) {
		return (i & 1) == 0;
	}
```

0: true
1: false
2: true
3: false
4: true
5: false
56: true
57: false
108961: false
10186536: true
2147483647: false


----------



## madboy (19. Okt 2009)

Ui, ein Ratespiel ;-)

force93: bitte ignorieren. Wobei... Wenn du deinem Lehrer erklären kannst, was unten stehender Code macht, kannst du es natürlich verwenden. Aber ich würde lieber bei den schon gegebenen Tips bleiben 

[c](i&1) != 1[/c]?

EDIT: verflixt, zu langsam :-(


----------



## eRaaaa (19. Okt 2009)

man muss eig. nur wissen was z.b.

```
int i = 5/2;
i =  4/2;
```
da dann jeweils in i drinnen steht ?! das sollte schon vollkommen reichen ...


----------



## force93 (19. Okt 2009)

Thx an alle. :] Habs jetzt so gelöst:


```
public class TEST
{
    public static void main (String[] args)
    {
           int i = 3;
            if(i % 2 == 0)
            {
            System.out.println("Die Zahl ist gerade!");
        }
            else{
               System.out.println("Die Zahl ist nicht gerade");
            }
}
}
```


----------



## hdi (19. Okt 2009)

Genau, aber jetzt ist i ja immer 3. Das Programm soll eine Zahl einlesen, die der Benutzer eingibt. Sonst macht das Programm ja auch keinen Sinn, denn wenn du die Zahl im Quellcode festlegst weisst du ja schon, ob sie gerade ist oder nicht, also wofür noch ein Programm welches das testet?

Für das Einlesen:

```
InputStreamReader reader = new InputStreamReader(System.in);
String userEingabe = reader.readLine();
```

System.in ist der Standard-Eingabestrom, so wie System.out (das kennst du ja schon von der print-Methode) der Ausgabestrom ist.
Beim Aufruf von reader.readLine() blockiert das Programm solange, bis der User Enter gedrückt hat. Was die Methode zurückgibt ist dann der Text, den der User eingeben hat. Das musst du dann noch in eine Zahl umwandeln, um damit rechnen zu können:


```
int zahl = Integer.parseInt(userEingabe);
```

Beachte dass das einen Laufzeit-Fehler gibt, falls der User keine Zahl eingegeben hat sondern zB sowas wie "Apfel".

PS: Du solltest die Klasse noch umbennen in "Test", denn es ist eine Konvention dass man dafür kein CapsLock verwendet


----------



## xjCoder (19. Okt 2009)

Oh herrlich...

Meine Freundin hatte eben noch eine geniale Idee zur Lösung "Gerade/Ungerade - ohne Modulo"...



```
int letzteZiffer = Integer.parseInt(userEingabe.substring(userEingabe.length()-1));

if (letzteZiffer == 1 || letzteZiffer == 3 || letzteZiffer == 5 || letzteZiffer == 7 || letzteZiffer == 9)
{
  System.out.println("ungerade");
}
else
{
  System.out.println("gerade");
}
```

Ein echter Kracher, wie ich finde :toll:


----------



## hdi (19. Okt 2009)

```
if(freundin.alter == 18 || freundin.alter == 19 || freundin.alter == 20 || freundin.alter == 21 || freundin.alter == 22 || freundin.alter == 23 || freundin.alter == 24 || freundin.alter == 25 || freundin.alter == 26 || freundin.alter == 27 || freundin.alter == 28 || freundin.alter == 29){
      if(freundin.haarfarbe == blond && freundin.augenfarbe == blau){
               System.out.println("unintelligent");
      }
      else{
               System.out.println("vllt. intelligent");
      } 
}
```

...


----------



## eRaaaa (19. Okt 2009)

Xeter hat gesagt.:


> Oh herrlich...
> 
> Meine Freundin hatte eben noch eine geniale Idee zur Lösung "Gerade/Ungerade - ohne Modulo"...
> 
> ...



ohje 

ich bin ja immernoch für (wenns umbedingt ohne modulo sein soll)

```
int i = 21;
        if((i/2)*2==i){  
            System.out.println("gerade");
        }else{
            System.out.println("ungerade");
        }
```


----------

