Nur Bestimmte Werte aus einem Array in ein anderes Speichern

Guten Morgen!:)

ich arbeite aktuell an einer Aufgabe bei der ich eine Integer Zahl einlesen soll, von dieser dann die Teiler in einem Array der länge -> 500 speichern soll. Das habe ich soweit auch geschafft jedoch, soll ich dann "nur" die Teiler(zahlen) in für mich zumindest am sinnvollsten ein neues Array speichern. Jedoch klappt das irgendwie nicht richtig, habe jetzt viel probiert aber komme nicht weiter. Zudem soll ich die "Teiler" dann bei der ausgabe nicht wie ein Array ausgeben also like [1,2,3,4] sondern sollen sie nur mit der leertaste getrennt werden.
Bin ich schon auf dem falschen weg oder geht das nur mit Strings indem ich z.b. die "Split()" methode verwende?

Hier mal mein Code was ich bisher geschafft habe:

Code:
import java.util.Arrays;
import java.util.Scanner;

public class DividersArrayResult {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        int input;
        int[] output;
        System.out.println("Please enter a Integer number to get the dividers: ");
        input = sc.nextInt();

        System.out.println("Your number: " + input);

        output = calculateDividers(input);
        System.out.println(Arrays.toString(output));

        sc.close();

    }

    public static int[] calculateDividers(int input) {
        int[] dividerArray = new int[500];
        int[] dividerArrayCopy = new int[input];
        for (int i = 1; i <= input; i++) {
            if (input % i == 0) {
                dividerArray[i] = i;

            }
            for (int j = 0; j < input; j++) {
                if (dividerArray[i] > 0) {
                    dividerArrayCopy[j] = dividerArray[i];
                }
            }
        }

        return dividerArrayCopy;
    }

}
Ich bedanke mich für jegliche Hilfe die ich hier kriegen kann!!

Mit freundlichen Grüßen
LeeSin
 
Wie groß müsste denn das neue Array sein, damit es sinnvoll ist?
Danke für deine Antwort :)!

Ich habe es so gedacht, das die Array - kopie, dann mindestens so groß sein muss wie die Zahl die der User eingeben hat. Also beispielsweise 6 -> muss mein Array auch 6 elemente beherbergen, wobei die 6 hat ja nur 4 teiler. Also müsste ich mein Array so groß machen so viele Teiler wie es gibt. Macht das Sinn?

Sollte ich dann beim ersten schleifen durchlauf eventuell eine Variable zählen lassen "teiler" die jedes mal mitzählt wenn einer gefunden wurde? und danach dann eine Array - kopie mit der mit der größe arrayCopy[teiler] ?

Liebe Grüße
 
Sollte ich dann beim ersten schleifen durchlauf eventuell eine Variable zählen lassen "teiler" die jedes mal mitzählt wenn einer gefunden wurde? und danach dann eine Array - kopie mit der mit der größe arrayCopy[teiler] ?
Sehr gut.

Bleiben wir aber nochmal kurz beim ersten Array. Du hast also jetzt einen Zähler, der in der Schleife die Anzahl der bisher ermittelten Teiler mitzählt. Kannst Du das ausnutzen, um die Zähler Teiler nacheinander (also lückenlos) im ersten Array abzulegen?
 
Sehr gut.

Bleiben wir aber nochmal kurz beim ersten Array. Du hast also jetzt einen Zähler, der in der Schleife die Anzahl der bisher ermittelten Teiler mitzählt. Kannst Du das ausnutzen, um die Zähler Teiler nacheinander (also lückenlos) im ersten Array abzulegen?
Leider stehe ich auf dem Schlauch: was ich jetzt überlegt hatte, das ich sage -> if(dividerArray != 0) und dann jeweils diese in das erste Array speicher, aber das funktioniert nicht so ganz, da es sich noch mit dem Gedanken beißt bei mir das ich man ein Array von seiner größer her nicht mehr verändern kann oder ?
Code:
public static int[] calculateDividers(int input) {
        int[] dividerArray = new int[500];
        int divider = 0;
        for (int i = 1; i <= input; i++) {
            if (input % i == 0) {
                dividerArray[i] = i;
                divider++;
                if (dividerArray[i] != 0) {
                    for (int j = 0; j < i; j++) {
                        dividerArray[j] = dividerArray[i];

                    }
                }
            }
        }

        return dividerArray;
    }
Wäre jetzt mal ohne das kopierte Array, funktioniert aber leider nicht. Ich benutze auch nicht die variable teiler weil mir nicht einfällt wie.
 
Also mich würde erst einmal die Logik interessieren:
Was willst Du wie machen? Kannst Du die Schritte einmal einfach in Worte fassen und aufschreiben?

Generell sollte man sich immer erst im klaren sein, was wann wie gemacht werden soll. Dazu einfach einmal grob anfangen und dann die Schritte weiter unterteilen!
 
Also mich würde erst einmal die Logik interessieren:
Was willst Du wie machen? Kannst Du die Schritte einmal einfach in Worte fassen und aufschreiben?

Generell sollte man sich immer erst im klaren sein, was wann wie gemacht werden soll. Dazu einfach einmal grob anfangen und dann die Schritte weiter unterteilen!
Servus! Danke für deine Antwort
1. Ich erstelle eine Methode um die teiler zu berechnen und übergebe diese Zahl.
2. Dann wie aus der Aufgabenstellung hervorgeht, erstelle ich ein Array mit der länge [500].
3. Dann gehe ich das Array am index i = 1 durch, da geteilt durch 0 nicht geht, und teile jeweils die eingebene zahl durch den index und schaue ob das ergebnis null ist, somit ist i = ein teiler von meiner eingeben zahl.
4. Speichere die teiler im Array.
5. jetzt möchte ich diese Werte nebeinander schreiben also als Ausgabe, im besten fall in ein neues Array? damit sie nebeinander stehen, das problem ist, die teiler sollen mit leertaste getennt werden.
6. Meine idee war ja das ich zählen lasse wie oft ein teiler vor kam, so groß dann das neue Array mache und die zahlen aus dem alle zahlen != 0 in das neue Array speicher.
Das funktioniert aber nicht.
 
Leider stehe ich auf dem Schlauch
Nimm einen Zettel mit 10 Zeilen (500 wäre etwas viel) für mögliche Teiler. Jetzt nimmst Du irgendeine Zahl, sagen wir mal 12.

Die Zahl 12 hat sechs Teiler: 1, 2, 3, 4, 6, 12. Nach Deiner Logik würdest Du den Teiler i in Zeile i eintragen. Würdest Du das auf dem Zettel auch so machen?

ZeileTeiler
11
22
33
44
5
66
7
8
9
10
Problem: die 12 hat keinen "Platz" mehr.

Oder würdest Du das nicht eher so aufschreiben?
ZeileTeiler
11
22
33
44
56
612
7
8
9
10
 
Nimm einen Zettel mit 10 Zeilen (500 wäre etwas viel) für mögliche Teiler. Jetzt nimmst Du irgendeine Zahl, sagen wir mal 12.

Die Zahl 12 hat sechs Teiler: 1, 2, 3, 4, 6, 12. Nach Deiner Logik würdest Du den Teiler i in Zeile i eintragen. Würdest Du das auf dem Zettel auch so machen?

ZeileTeiler
11
22
33
44
5
66
7
8
9
10
Problem: die 12 hat keinen "Platz" mehr.

Oder würdest Du das nicht eher so aufschreiben?
ZeileTeiler
11
22
33
44
56
612
7
8
9
10
Hah klasse, habe das glaube ich zumindest schon einmal jetzt hinbekommen, danke für den denkanstoß !
Code:
public static int[] calculateDividers(int input) {
        int[] dividerArray = new int[10];
        int divider = 1;
        for (int i = 0; divider <= input; divider++) {
            if (input % divider == 0) {
                dividerArray[i] = divider;
                i++;

            }
        }
        return dividerArray;
so wird es zumindest mal in der Reihenfolge ausgegeben! Zwar hängen die Nullen noch hinten dran, aber jetzt probiere ich mal das in ein neues Array zu verfrachten.

Ich melde mich, Sorry wenn Doppelpost.
 
Danke nochmal für die großzügige Hilfe!
Habe es jetzt geschafft in ein neues Array zu kopieren und die Werte stehen jetzt sauber da.
Code:
public static int[] calculateDividers(int input) {
        int[] dividerArray = new int[500];
        int divider = 1;
        int valueForNewArray = 0;

        for (int i = 0; divider <= input; divider++) {
            if (input % divider == 0) {
                dividerArray[i] = divider;
                i++;
                valueForNewArray = i;

            }
        }
        int[] dividerArrayCopy = new int[valueForNewArray];
        for (int i = 0; i < dividerArray.length; i++) {
            if (dividerArray[i] != 0) {
                dividerArrayCopy[i] = dividerArray[i];
            }
        }
        return dividerArrayCopy;
    }
Hat jemand für mich anstöße wie ich es löse das meine Elemente von dem kopierten Array, nu so ausgeben werden das sie mit einem leerzeichen getrennt sind -> input = 6 -> 1 2 3 6.
Ich kenne mich bis jetzt nur mit Strings aus das man diese mit der split() methode mit anderen "zeichen" trennen kann. Könnte ich dieses "int" array in ein "String" array casten und dann spliten mit einem leerzeichen?

Liebe Grüße!!
 
Habe es jetzt geschafft in ein neues Array zu kopieren
Sehr schön. Wenn Du Dir noch einen Gefallen tun willst, nimm den Schleifenzähler in die Schleife und den Teiler-Zähler nach außen.

Also statt
Java:
        int divider = 1;
        for (int i = 0; divider <= input; divider++) {
Java:
        int i = 0;
        for (int divider = 1; divider <= input; divider++) {
Außerdem kannst Du der Variablen i noch einen besseren Namen geben, z. B. dividerCount:
Java:
        int dividerCount = 0;
        for (int divider = 1; divider <= input; divider++) {
Jetzt kannst Du unten nämlich einfach auf dividerCount zugreifen und brauchst keine Prüfungen mehr
Java:
        int[] output = new int[dividerCount];
        for (int i = 0; i < dividerCount; i++) {
            output[i] = dividerArray[i];
        }
Hat jemand für mich anstöße wie ich es löse das meine Elemente von dem kopierten Array, nu so ausgeben werden das sie mit einem leerzeichen getrennt sind -> input = 6 -> 1 2 3 6.
Schleife über alle Elemente des Arrays?
 
Sehr schön. Wenn Du Dir noch einen Gefallen tun willst, nimm den Schleifenzähler in die Schleife und den Teiler-Zähler nach außen.

Also statt
Java:
        int divider = 1;
        for (int i = 0; divider <= input; divider++) {
Java:
        int i = 0;
        for (int divider = 1; divider <= input; divider++) {
Außerdem kannst Du der Variablen i noch einen besseren Namen geben, z. B. dividerCount:
Java:
        int dividerCount = 0;
        for (int divider = 1; divider <= input; divider++) {
Jetzt kannst Du unten nämlich einfach auf dividerCount zugreifen und brauchst keine Prüfungen mehr
Java:
        int[] output = new int[dividerCount];
        for (int i = 0; i < dividerCount; i++) {
            output[i] = dividerArray[i];
        }

Schleife über alle Elemente des Arrays?
Mihe7 ! Vielen Dank für die unterstützung :)
Vor allem für die optimierung von meinem Code das muss ich noch lernen.

Ja und mit der "Schleife über alle Elemente des Arrays" .. So simpel ist dann manchmal doch! :D

Also passt jetzt alles vielen Dank nochmal.
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben