Anzahl un/gerader Zahlen aus Array auslesen

mipflip

Mitglied
Ich mach auf der Uni grad den Java-Grundkurs und hab da leider so meine Probleme da es weder Support noch Lösungen gibt. Ich steh hier leider an und komme nicht weiter, daher bitte ich um Lösungshinweise.

Angabe:
Java:
public abstract class AusgabeEinfach {
  // Gibt die Anzahl der geraden Zahlen
  // im übergebenen Array "zahlen" auf der Konsole aus
  public abstract void ausgabeGerade(int[] zahlen);

  // Gibt die Anzahl der ungeraden Zahlen
  // im übergebenen Array "zahlen" auf der Konsole aus
  public abstract void ausgabeUngerade(int[] zahlen);
}
Beschreibung:
Das Ziel der Aufgabe ist es eine Klasse zu schreiben, die für ein Array die Anzahl der
geraden bzw. ungeraden Zahlen berechnet und auf der Konsole ausgibt. Schreiben
Sie die konkrete Klasse „LoesungEinfach“ als Erweiterung der oben definierten
abstrakten Klasse „AusgabeEinfach“.Implementieren Sie die beiden Methoden „ausgabeGerade(int[] zahlen)“ und „ausgabeUngerade(int[] zahlen)“. Die Methoden geben jeweils die Anzahl der geraden bzw. ungeraden Zahlen des übergebenen Arrays (Parameter „int[] zahlen“) auf der Konsole aus.
Hinweis:
Modulo berechnet den Rest der Division, in Java ist es der „%“- Operator.
Beispiel: 17 % 10 ist gleich 7.

Mein Lösungsansatz wäre hier in Eclipse:
Java:
public abstract class AusgabeEinfach {
   public static void main(String[] args){
   }
      public abstract void ausgabeGerade(int[] zahlen);
      public abstract void ausgabeUngerade(int[] zahlen);
   }


public class LoesungEinfach extends AusgabeEinfach {
      int [] zahlen = {1,2,3,4,5,6,7,8,9,10};
   
public void ausgabeGerade(int[] zahlen){
         int istGerade = 0;
 
         for(int i=0; i<zahlen.length; i++){
      if (zahlen[I]%2 == 0){
         istGerade++;
             }
}
         System.out.print(istGerade);
       }
 
public void ausgabeUngerade(int[] zahlen){
              int istUngerade = 0;
       for(int i=0; i<zahlen.length; i++){
              if (zahlen[I]%2 != 0){
                  istUngerade++;
                 }
          }
       System.out.println(istUngerade);
       }
   }
Sieht hier jemand meinen Fehler? Die Konsole gibt leider keine Werte aus...[/I][/I]
 
Zuletzt bearbeitet von einem Moderator:

mipflip

Mitglied
Vielen Dank für die schnelle Antwort.

@VfL_Freak: komisch, hat sich anscheinend beim Kopieren verändert, im Eclipse steht es noch richtig drinen.
@stg: Ich hab immer so meine Probleme mit der main-Methode. Wenn ich die abstacten Methoden allerdings in den main-Methodenblock packe, bekomm ich eine Fehlermeldung.
kkkk.jpg

Java:
public abstract class AusgabeEinfach {
  
public static void main(String[] args){
          
    public abstract void ausgabeGerade(int[] zahlen);
   
    public abstract void ausgabeUngerade(int[] zahlen);
         }
}

wie wäre es richtig?
 

VfL_Freak

Top Contributor
Moin,
das heißt, es würde grundlegend so funktionieren und alle ableitenden Klassen bräuchten keine 'main' ?????
public abstract class AusgabeEinfach {
public static void main(String[] args){

public abstract void ausgabeGerade(int[] zahlen);

public abstract void ausgabeUngerade(int[] zahlen);
}
}
hmm, ist mir zugegebenermaßen noch nie untergekommen ...

Gruß Klaus
 

looparda

Top Contributor
Java:
public abstract class AusgabeEinfach {
public static void main(String[] args){
 
    public abstract void ausgabeGerade(int[] zahlen);
 
    public abstract void ausgabeUngerade(int[] zahlen);
         }
}
Um dich mal auf den richtigen Weg zu bringen:
Java:
public abstract class AusgabeEinfach {
    public abstract void ausgabeGerade(int[] zahlen);
    public abstract void ausgabeUngerade(int[] zahlen);
    public static void main(String[] args){
    }
}
Noch einmal zur Verdeutlichung: du hattest die abstrakten Methoden in deiner Main-Methode. Die Definitionen gehören jedoch zur Klasse AusgabeEinfach und nicht in die main-Methode.

Jedoch ist deine main-Methode leer - wenn ich es richtig verstanden habe ist das nur durch das Kopieren entstanden. Da mir der Rest richtig erscheint ist der Code, an dem es nun hakt nicht hier im Thread zu finden. Also kann man schlecht helfen oder Tips geben.

Das Einzige, was mir auffällt ist:
- Die Main-Methode hast du gerade irgendwo in den Code gewurstelt - das kann man, wie schon geklärt machen. Üblicherweise spendiert man der Main-Methode jedoch eine eigene Klasse und packt sie nicht in eine abstrakte Klasse.
- Du übergibst die Zahlen an ausgabeGerade und ausgabeUngerade. Wieso hast du dann ein extra Feld für weitere Zahlen in der LoesungEinfach Klasse?
 
Zuletzt bearbeitet:

mipflip

Mitglied
Ich hab mich die letzten Tage intensive mit Java beschäftigt, bin allerdings was das Problem anbelangt immer noch nicht weiter gekommen. Bin momentan auf diesem Stand:

Java:
public abstract class AusgabeEinfach {
  
   public abstract void ausgabeGerade(int[] zahlen);
  
   public abstract void ausgabeUngerade(int[] zahlen);
}


Java:
public class LoesungEinfach extends AusgabeEinfach{
  
   public void ausgabeGerade(int[] zahlen) {
       for (int i = 0; i<zahlen.length;i++){
           if(zahlen[i]%2 == 0){
               int istGerade = 0;
               istGerade++;
               System.out.println("Anzahl gerade Zahlen im Array: "+ istGerade);
           }
       }
   }

       public void ausgabeUngerade(int[] zahlen) {
       for (int i = 0; i<zahlen.length;i++){
           if(zahlen[i]%2 != 0){
               int istUngerade = 0;
               istUngerade++;
               System.out.println("Anzahl ungerade Zahlen im Array: "+istUngerade);
           }
       }
   }
       public static void main(String[]args){
           // das Array zahlen wird hier von den oberen Methoden nicht gesehen
           int [] zahlen = new int[] {1,2,3,4,5,6,7,8,9,10,11,12,13};
          
           }
       }

ich hab hier das Problem dass ich die Main-Methode nicht zum laufen bekomm. Was müsste ich denn hier reinschreiben dass diese läuft und die oberen Methoden ausführt.
ich hätte an soetwas gedacht wie:
Java:
public void run(methode){
system.out.println();
}
 
Zuletzt bearbeitet:

looparda

Top Contributor
Die Klammerung sieht nun gut aus. Dir scheint es jedoch an einfachen Java-Kenntnissen zu fehlen - insbesondere was Objekte erzeugen und OOP angeht. Das ist aber nicht schlimm, weil man es schnell lernen kann. Im Prinizip musst du nun ein Objekt von deiner Klasse LoesungEinfach erstellen, auf das du dann die beiden Methoden aufrufen kannst. Schau dir mal das an: http://www.spinfo.phil-fak.uni-koeln.de/29940.html und versuche es auf dein Problem zu übertragen.
Eine weitere run-Methode benötigst du nicht. Außerdem hast du die beiden Implementierungen von ausgabeGerade und ausgabeUngerade verschlimmbessert - die waren letzte Mal korrekt, wenn ich mich richtig erinnere. Aber das kannst du nach deinem Problem mit der Main-Methode und der Objekterzeugung nochmal angehen - eins nach dem anderen.
 

mipflip

Mitglied
Erstmal ein riesen Danke an alle für euren Input. Hat bei mir zwar leider etwas länger gedauert bis ichs gecheckt habe, aber nun sollte es funktioniert haben. Glaubt ihr wurde die Aufgabenstellung damit erfüllt?
Hier der Code:
Java:
public abstract class AusgabeEinfach {
 
   public abstract void ausgabeGerade(int[] zahlen);
 
   public abstract void ausgabeUngerade(int[] zahlen);
}

Java:
public class LoesungEinfach extends AusgabeEinfach{
 
           public void ausgabeGerade(int[] zahlen) {
               int istGerade = 0;
               for (int i = 0; i<zahlen.length;i++){
               if(zahlen[i]%2 == 0){
               istGerade++;
               System.out.println("Anzahl an gerader Zahlen im Array :"+istGerade);
                   }
               } 
           }
   public void ausgabeUngerade(int[] zahlen) {
           int istUngerade = 0;
           for (int i = 0; i<zahlen.length;i++){
               if(zahlen[i]%2 != 0){
                   istUngerade++;
                   System.out.println("Anzahl an ungerader Zahlen im Array :"+istUngerade);
           }
       } 
   }
           public static void main(String[]args){
                                     
           int [] zahlen = new int[] {1,2,3,4,5,6,7,8,9,10};
         
           LoesungEinfach loesung = new LoesungEinfach();
               loesung.ausgabeGerade(zahlen);
               System.out.println();
               loesung.ausgabeUngerade(zahlen);
               }
}
Hier die Ausgabe:
Java:
Anzahl an gerader Zahlen im Array :1
Anzahl an gerader Zahlen im Array :2
Anzahl an gerader Zahlen im Array :3
Anzahl an gerader Zahlen im Array :4
Anzahl an gerader Zahlen im Array :5

Anzahl an ungerader Zahlen im Array :1
Anzahl an ungerader Zahlen im Array :2
Anzahl an ungerader Zahlen im Array :3
Anzahl an ungerader Zahlen im Array :4
Anzahl an ungerader Zahlen im Array :5
lg Michi
 

looparda

Top Contributor
Außerdem hast du die beiden Implementierungen von ausgabeGerade und ausgabeUngerade verschlimmbessert - die waren letzte Mal korrekt, wenn ich mich richtig erinnere. Aber das kannst du nach deinem Problem mit der Main-Methode und der Objekterzeugung nochmal angehen - eins nach dem anderen.

Ich würde sagen, dass die Aufgabe nicht optimal erfüllt ist. Die Funktion soll die Antwort ausgeben und nicht hochzählen, denke ich.
 

mipflip

Mitglied
Da haben Sie wohl recht. Dh. ich schreib die System.out.println Methode einfach außerhalb der for-Schleifen dann sollte nur noch das Ergebnis ausgegeben werden...
Vielen Dank für das Feedback. Super Support
 

Neue Themen


Oben