# Klassen in Java



## Java1998 (4. Dez 2017)

Hallo,
ich habe eine Hausaufgabe in Informatik auf bekommen und zwar soll ich ein gegebenes Programm in Klassen unterteilen jedoch hatten wir das Thema noch nicht und ich frage mich wie ich das angehen soll.

Aufgabe:
Die Funktionalität des Programms wird von zwei Klassen ihres Pakets de.graf.zahl bereitgestellt. Erwartet wird die Klasse IO für Ein/Ausgabefunktionen und Knuddelig für Unterprogramme, die direkt mit knuddeligen Zahlen arbeiten. Das Hauptprogramm liegt weiterhin im unbenannten (default) Paket

Hier der gegebene Code:


```
import java.util.Scanner;

public class Blatt5Aufgabe1 {

    public static void main(String[] args) {
        // Scanner anlegen
        Scanner sc = new Scanner(System.in);
           
        System.out.println("Hallo Graf Zahl. Bitte geben Sie die Unter- und "
            + "Obergrenze für die Suche nach knuddeligen Zahlen ein: ");
   
        // Zahlen einlesen
        int start = sc.nextInt();
        int end = sc.nextInt();

        // Solange die Eingabe wiederholen wie diese falsch ist
        while (pruefeEingabe(start, end) != null) {
            System.out.println("Aber Herr Graf. " + pruefeEingabe(start, end)
                + " Bitte geben Sie Unter- und Obergrenze erneut ein.");
            start = sc.nextInt();
            end = sc.nextInt();
        }
       
        // Scanner schliessen
        sc.close();
       
        // Wenn die Grenzen falsch sind muessen sie getauscht werden
        if (start > end) {
            int temp = start;
            start = end;
            end = temp;
            System.out.println("Sie meinten sicher Untergrenze " + start   
                + " und Obergrenze " + end + ". Korrigiert");
        }
       
        System.out.print("Die knuddeligen Zahlen im Bereich " + start 
            + " bis " + end + ": ");
       
        // Boolean der fuer die korrekte Darstellung der Kommata sorgt
        boolean noComma = true;
        // Ausgabe aller knuddeligen Zahlen zwischen Unter- und Obergrenze
        for (int i = start; i <= end; i++) {
            if (isKnuddelig(i)) {
                if (!noComma) {
                    System.out.print(", ");
                }
                System.out.print(i);
                noComma = false;
            }
        }
       
        System.out.println("\nAuf Wiedersehen, Herr Graf.");
    }
   
    public static String pruefeEingabe(int start, int end) {
        // Es wird kein Fehler angenommen
        String fehler = null;
        // Wenn die Untergrenze fehlerhaft ist
        if (start < 2) {
            fehler = "Die Untergrenze ist kleiner als 2.";
        }
        // Wenn die Obergrenze fehlerhaft ist
        if (end < 2) {
            if (fehler == null) {
                fehler = "Die Obergrenze ist kleiner als 2.";
            } else {
                fehler += " Die Obergrenze ist kleiner als 2.";
            }
        }
        return fehler;
    }
   
    public static boolean isKnuddelig(int zahl) {
        // zahl ist knuddelig wenn die Teilersumme mindestens
        // so gross wie die Zahl selbst ist
        return teilerSumme(zahl) >= zahl;
    }
   
    public static int teilerSumme(int zahl) {
        int sum = 0;
        // Kontrolliere alle moeglichen Teiler
        for (int i = 1; i <= zahl / 2; i++) {
            // Wenn die Division den Rest 0 ergibt, ist es ein Teiler
            if (zahl % i == 0) {
                sum += i;
            }
        }
        return sum;
    }
}
```


----------



## Robat (4. Dez 2017)

Was genau ist denn die Frage?
Ihr müsst ja schon mal Klassen behandelt habe, sonst würde er die Aufgabe nicht stellen.
Überleg dir welche Methoden du in welche Klasse auslagern kannst und ob es eine Klassen - oder Objektmethode ist.


----------



## Java1998 (4. Dez 2017)

Ich bin jetzt so weit das ich die zwei Klassen erstellt habe jedoch weiss ich nicht wie ich es handhaben soll mit de.graf.zahl , da bei mir immer eine Fehlermeldung kommt wenn ich es ausführe.


----------



## Robat (4. Dez 2017)

`de.graf.zahl` ist nichts anderes als eine Package-Struktur.
Was heißt denn es geht net?


----------



## Java1998 (4. Dez 2017)

Blatt5Aufgabe1.java:2: error: package de.graf does not exist
import de.graf.zahl;


----------



## Robat (4. Dez 2017)

Wenn du die Klasse nutzen willst musst du sie importieren.


----------



## krgewb (4. Dez 2017)

Ich habe es so verstanden, dass die Klassen in dem Package sein sollen.

Dazu musst du ganz oben schreiben:

```
package de.graf.zahl;
```
Es wird rot unterschtrichen werden und da wird stehen:
*The declared package "de.graf.zahl" does not match the expected package ""*
Dort auf
*move 'MeineKlasse.java' to to package 'de.graf.zahl'*
klicken.

PS: Graf Zahl ist der Vampir aus der Sesamstraße. Auf englisch heißt er "Count von Count".


----------

