Primfaktorzerlegung

Baker

Mitglied
Hallo,

folgende Aufgabe:

Es soll ein Programm geschrieben werden, das bei Start eine natürliche Zahl als Parameter erhält und diese in ihre Primfaktoren zerlegen soll. Die Faktoren sollen anschließend aufsteigend, durch Komma getrennt, ausgegeben werden. Die 1 wird hierbei nicht betrachtet, da es sich um keine Primzahl handelt.

Ich habe dieses Programm geschrieben:

Java:
import java.util.Scanner;

public class PrimfaktorZerlegung {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        System.out.print("Zahl: ");
        int zahl = Integer.parseInt(sc.nextLine());

        int i = 2;

        while (i <= zahl) {
            if (zahl % i == 0) {
                System.out.print(i);
                zahl = zahl / i;
                if (zahl != 1)
                    System.out.print(", ");
            } else
                i++;
        }

    }
}

Allerdings kam bei der Abgabe des Codes eine Fehlermeldung. Daraufhin fragte ich meinen Prof, warum da ein Fehler ist, da das Programm ja einwandfrei läuft. Dann sagte er:

der Test erwartet Ausgabe von 2,2,2,5 bei einem Startparameter von 40. Den müssen sie über den Übergabeparameter Args übernehmen:
public static void main(String[] args) {

//Scanner sc = new Scanner(System.in);

int zahl = Integer.parseInt(args[0]);

Kann mir jemand helfen, wie man das macht?

Vielen Dank!
 
Beste Antwort
Du musst dann dein Programm auch mit einem Parameter starten. Dieser Parameter args sind ja die Argumente, die beim Start mitgegeben werden.

Da Du IntelliJ nutzt: In den Run Configurations kannst Du in dem Feld "Program arguments" angeben, welche Zahl behandelt werden soll.

httpdigest

Top Contributor
der Test erwartet Ausgabe von 2,2,2,5 bei einem Startparameter von 40. Den müssen sie über den Übergabeparameter Args übernehmen:

public static void main(String[] args) {
//Scanner sc = new Scanner(System.in);
int zahl = Integer.parseInt(args[0]);

Kann mir jemand helfen, wie man das macht?
Du setzt dich vor deine Tastatur, öffnest einen Java/Text-Editor und copy/pastest den Code, den du ja selbst schon hier geschrieben hast (also was dir vermutlich dein Professor vorgeschlagen hat), in dein Programm... da steht doch literally der Code, den du hier verwenden sollst.
 

Baker

Mitglied
Hab ich schon:

Java:
import java.util.Scanner;

public class PrimfaktorZerlegung1 {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        int zahl = Integer.parseInt(args[0]);

        int i = 2;

        while (i <= zahl) {
            if (zahl % i == 0) {
                System.out.print(i);
                zahl = zahl / i;
                if (zahl != 1)
                    System.out.print(",");
            } else
                i++;
        }
    }
}

Dabei kam das raus:

"C:\Program Files\Java\jdk-17.0.1\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2022.3.3\lib\idea_rt.jar=56863:C:\Program Files\JetBrains\IntelliJ IDEA 2022.3.3\bin" -Dfile.encoding=UTF-8 -classpath "C:\Users\name\IdeaProjects\uni\Labor Programmieren\Labor Programmieren\out\production\Labor Programmieren" PrimfaktorZerlegung1
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
at PrimfaktorZerlegung1.main(PrimfaktorZerlegung1.java:9)

Process finished with exit code 1
 

KonradN

Super-Moderator
Mitarbeiter
Du musst dann dein Programm auch mit einem Parameter starten. Dieser Parameter args sind ja die Argumente, die beim Start mitgegeben werden.

Da Du IntelliJ nutzt: In den Run Configurations kannst Du in dem Feld "Program arguments" angeben, welche Zahl behandelt werden soll.
 
Beste Antwort

Neumi5694

Top Contributor
Wenn du schon dabei ist. Eine saubere Lösung ist am Anfang zu prüfen, OB was per Parameter übergeben wurde und andernfalls eine entsprechende Meldung auszugeben und dann entsprechend zu reagieren (Programm beenden oder Eingebeaufforderung per Scanner beispielsweise)
 

Ähnliche Java Themen

Neue Themen


Oben