# JAVA - Ungerade Zahlen Array



## UStgt_java (27. Aug 2013)

Hallo Leute,

dies wird voraussichtlich eine meiner Klausur-aufgaben. Ich bitte euch mir zu helfen, ich weis Hausaufgaben werden nicht gemacht daher hab ich bereits mein bestes gegeben!

Leider funktioniert mein Java nicht( wird nur ein schwarzes MS-DOS Fenster aufgerufen daher bitte ich euch mir zu helfen!)

Schreiben Sie eine Java Methode die die Anzahl der natürlichen ungeraden(1 3 5 7 …) Zahlen des Feldes liefert! (Anzahl ungerade zahlen)



```
Public int anzahlUngeraden( int ARRAYKLAMMERN array)          // diese Zeile wurde von der Aufgabe vorgegeben//
{
Int anzahl = 0;
      for (int i =0; i < array.length; i++) {
         if(array ARRAY (i) KLAMMERN % 2 != 0) {
         anzahl = anzahl + 1;
         }
      System.out.println(" " + anzahl);
      }

}
```



Ist das bis jetzt falsch?
Außerdem kann ich aus der Aufgabe nicht herauslesen ob ein return bevorsteht. Da "void" nicht in der Methode steht, denke es wird ein return des wertes erwartet wird!
Also EVTL. folgendermaßen?


```
Public int anzahlUngeraden( int ARRAYKLAMMERN array)          // diese Zeile wurde von der Aufgabe vorgegeben//
{
Int anzahl = 0;
      for (int i =0; i < array.length; i++) {
         if(array ARRAY (i) KLAMMERN % 2 != 0) {
         anzahl = anzahl + 1;
         }
      }
return wert;
}
```


DANKE!!

PS: ARRAYKLAMMERN werden komisch angezeigt daher als Wort geschrieben!


----------



## Milo (27. Aug 2013)

Hi,



UStgt_java hat gesagt.:


> Hallo Leute,
> 
> Also EVTL. folgendermaßen?
> 
> ...



naja, sieht doch fast richtig aus. Der primitive Datentyp _int_ schreibt sich, wie auch das Wort _public_ klein. Als Rückgabewert musst Du natürlich einen nehmen, der auch in Deinem Code vorkommt. Die Variable _wert_ existiert nicht, _anzahl_ böte sich aber an, oder?

Gruß Micha


----------



## butterbemme (28. Aug 2013)

So von der Semantik her schauts gar nicht schlecht aus, unbedingt noch das mit dem Rückgabewert fixen.
Aber was zum Teufel geht mit der Syntax? Ist das von dir oder so gegeben?


----------



## GeoRage (28. Aug 2013)

In der Regel ist es egal ob du mit 
	
	
	
	





```
System.out.println
```
 oder mit 
	
	
	
	





```
return
```
 arbeitest...
Der Vorteil bei 
	
	
	
	





```
System.out.println
```
 das du jede ungerade Zahl in einer seperaten zeile in die Konsole ausgibst (für eine Schulaufgabe reicht das in der Regel aus)
Bei deinem jetzigen 
	
	
	
	





```
return
```
 gibts du alle zahlen hintereinander als einen String aus.
als beispiel:
du hast nun 1,3,5,7,9,11,13,15 aus deinem array aussortiert und willst das ausgeben.

dein 
	
	
	
	





```
return
```
 sieht jetzt so aus: 13579111315

nicht gerade übersichtlich, oder????
Also entweder deinen 
	
	
	
	





```
return
```
 bearbeiten oder bei 
	
	
	
	





```
System.out.println
```
arbeiten
Aber das Problem solltest bei so einer Aufgabenstellung ja hinbekommen 


EDIT: ---- BB-Code hat Urlaub?!?!?!?


----------



## Pippl (28. Aug 2013)

GeoRage hat gesagt.:


> In der Regel ist es egal ob du mit
> 
> 
> 
> ...



Falsch!

```
System.out.println
```
 - gibt etwas auf der Konsole aus und dient zur Darstellung von Werten.

```
return
```
 - gibt das "Ergebnis" einer Methode zurück

Das sind zwei grundlegend verschiedene Sachen! Bitte nicht durcheinander bringen! 



GeoRage hat gesagt.:


> Der Vorteil bei
> 
> 
> 
> ...



Du hast recht damit, dass 
	
	
	
	





```
System.out.println
```
 etwas in einer Zeile ausgibt. Nachdem aber 
	
	
	
	





```
return
```
 ausgeführt wurde ist die Methode beendet und es wird nichts auf der Console ausgegeben. 

@TO:
Dein 
	
	
	
	





```
return
```
 muss die gefundene Anzahl an ungeraden Zahlen zurückgeben. So wie dein Code aktuell da steht kompiliert dieser nicht.


----------



## Bitler (28. Aug 2013)

```
public int anzahlUngeraden( int [] array){
                int anzahl = 0;
                for (int i =0; i < array.length; i++) {
                   if(array [i] % 2 != 0) {
                      anzahl = anzahl + 1;
                   }
          
                }
             return anzahl;
             }
```


----------



## GeoRage (28. Aug 2013)

Pippl hat gesagt.:


> Falsch!
> 
> ```
> System.out.println
> ...


Sry mein Fehler  Habe vorrausgesetzt das man weiß, das return die methode abbricht.
Ich bezog mich auch eher auf die Aufgabenstellung, als auf die Syntax.
Ich habe in der Schule damals zB fast nur mit System.out.println gearbeitet (solang ich intern im programm natürlich keinen returnwert brauchte) 



Pippl hat gesagt.:


> @TO:
> Dein
> 
> 
> ...


Uh, wow..
Und ich sollt das nächste mal besser lesen.
hatte erst verstanden, es sollen alle ungeraden zahlen ausgelesen werden. 

Bitler, ansich nett, aber warum lässt du ihn nicht selbst auf die Lösnug kommen?
so ist der Lerneffekt fast gleich null.


----------



## Bitler (29. Aug 2013)

Naja da hast du nicht ganz unrecht, aber in 70-80% der Fälle verläuft sich dann so ein Post, 
weil es dem Ersteller zu schwer fällt selbst darauf zukommen...
Wenn er jetzt die Lösung sieht und er es wirklich lernen möchte, dann stellt er dazu Fragen, die ich , 
oder mit Sicherheit auch andere, ihm gerne beantworte(n)...


----------



## Shulyn (29. Aug 2013)

Die kleinen Fehlerchen wurden ja schon von den anderen angesprochen.
Du könntest das ganze aber auch viel "kürzer" schreiben, ohne das Array immer zu durchlaufen!


```
private static int anzahlUngeraden(int[ ] array) {
// auf null prüfen, und auf länge 0. Du solltest immer daran denken fehler früh abzufangen...
        if(array == null || array.length == 0) {
            return -1;
        }
        
// hilfsvariable, damit wir array.length nicht so oft aufrufen müssen (und macht die zeilen etwas kürzer ;)  )
        int length = array.length;
        
// ist die array länge gerade?
        if(length % 2 == 0) {
// wenn ja, dann gibt es gleich viele gerade wie ungerade elemente.
            return length / 2;
        } else {
// nein, die länge ist ungerade, 1 ungerades element mehr als gerade, daher +1
            return length / 2 +1;
        }
        
//kurzform! ohne das if-else, etwas schwerer zu lesen, dafür kürzer ;) 
//        return length % 2 == 0 ? length / 2 : length / 2 +1 ;
    }
```

gruß
Shu


----------



## Bitler (29. Aug 2013)

Du solltest deinen Post nochmals gründlich überdenken!:noe::noe::noe:
oder aber du hast einfach nur die Fragestellung falsch interpretiert...

Soll nicht angreifend wirken, aber erst denken :idea: dann posten!


----------

