Methoden Unerwünschte Ausgabe bei System.out.print in For-Schleife

paulen1

Mitglied
Moin,

Das ist meine erste Frage als relativ neuer Student, deshalb etwas Verständnis bitte ;).

Ich habe die Aufgabe alle echten Teiler von einer vom User übergebenen Zahl n auszugeben.
Folgendes ist mein Ansatz:

Java:
 public void properDivisors(int n){
    System.out.print ("Echte Teiler von " + n + " sind ");
    for (int i = 1; i <= n; i++){
        if (n%i==0 && n!=i && i!=1){
        System.out.print (i + ", ");
    }
    }
    System.out.println(" ");   
    }

Das Problem: Es ist eine genaue Formatierung erforderlich. Angenommen der User übergibt 15. Dann kriege ich natürlich "Echte Teiler von 15 sind 3, 5, " als Systemausgabe. Gefordert ist aber: "Echte Teiler von 15 sind 3, 5" (ohne "," und ohne Leerzeichen. Abgeschlossen werden soll es mit einem Zeilenumbruch, deshalb das System.out.println).

Wenn ich bestimmen könnte, was der letzte oder erste Teiler der jeweiligen Zahl ist, könnte ich mit einer if abfrage verhindern das dort das Komma mit gedruckt wird.

Hat jemand eine Idee wie man das herausfindet, oder wahrscheinlich gibt es einen noch viel einfacheren Weg?

Vielen Dank im Voraus,
Paul
 
Beste Antwort
K
Die erste Antwort kam, ehe ich fertig geschrieben hatte, daher hatte ich abgebrochen.

Mein Tipp ist bei sowas immer: Vergiss erst einmal den Code!

Du bekommst eine Zahl und sollst dann mit Zettel und Papier alle Teiler aufschreiben.

Wie gehst Du da dann vor?

Du suchst einen Teiler und wenn Du ihn gefunden hast, schreibst Du ihn auf.
Beim Aufschreiben schaust Du: Ist es der erste Teiler, dann schreibst Du ihn direkt auf. (Also dann hast Du etwas wie "3".)
Und bei allen weiteren Teilern weisst Du: "Ich habe schon ein Teilergebnis, also schreibst Du erst ein ", " und dann den zweiten Teiler (und hast dann das "3, 5".

Das wäre dann eine erste Idee, sowas umzusetzen. Du brauchst also nur eine weitere Variable, in der Du dir merkst, ob...

fhoffmann

Top Contributor
Du kannst mitzählen, ob du schon einen Teiler gefunden hast.
Wenn du den ersten Teiler findest, gibst du ihn aus (ohne Komma),
bei allen weiteren gibst du "," + i aus.
 
K

kneitzel

Gast
Die erste Antwort kam, ehe ich fertig geschrieben hatte, daher hatte ich abgebrochen.

Mein Tipp ist bei sowas immer: Vergiss erst einmal den Code!

Du bekommst eine Zahl und sollst dann mit Zettel und Papier alle Teiler aufschreiben.

Wie gehst Du da dann vor?

Du suchst einen Teiler und wenn Du ihn gefunden hast, schreibst Du ihn auf.
Beim Aufschreiben schaust Du: Ist es der erste Teiler, dann schreibst Du ihn direkt auf. (Also dann hast Du etwas wie "3".)
Und bei allen weiteren Teilern weisst Du: "Ich habe schon ein Teilergebnis, also schreibst Du erst ein ", " und dann den zweiten Teiler (und hast dann das "3, 5".

Das wäre dann eine erste Idee, sowas umzusetzen. Du brauchst also nur eine weitere Variable, in der Du dir merkst, ob schon Teiler gefunden wurden. Dann wäre es nur etwas wie "if (teilerGefunden) System.out.print(", "); else teilerGefunden=true;" -> Also wenn Teiler gefunden wahr ist, dann gib das Trennzeichen aus. Ansonsten setz es auf true (denn dann hast Du ja jetzt einen ersten Teiler gefunden).

Dieser erste Ansatz ist in meinen Augen extrem wichtig. Den muss man am Anfang ganz viel üben! Du musst dir also überlegen: Was muss da überhaupt passieren? Da es schwer ist, sich das im Kopf zu überlegen: Nimm Stift und Papier zur Hand! Spiel es von Hand durch!

Ein zweiter Ansatz ist aber auch ebenso wichtig (und kommt ins Spiel, wenn Du den ersten Ansatz beherrscht): Teile und Herrsche!
Die Idee ist, dass Du die Komplexität gering hältst! Dazu ist z.B. wichtig, dass eine Methode nur eine Sache macht und zugleich kurz ist!
Hier wäre also denkbar, die Ermittlung der Teiler und die Ausgabe zu trennen. Damit vereinfacht sich der Code etwas, denn die jeweilige Verantwortung wird deutlich geringer. Das will ich aber an dieser Stelle noch nicht vertiefen, denn der erste Ansatz sollte Dir bei diesem konkreten Problem erst einmal helfen.
 
Beste Antwort

fhoffmann

Top Contributor
Ungetestet müsste es etwa so aussehen:
Java:
public void properDivisors(int n){
    int anzahlGefundeneTeiler = 0;
    System.out.print ("Echte Teiler von " + n + " sind ");
    for (int i = 2; i < n; i++){
        if (n%i==0){
            if (anzahlGefundeneTeiler == 0) {
                System.out.print (i);
            } else {
                System.out.print (", " + i);
            }
            anzahlGefundeneTeiler += 1;
        }
    }
    System.out.println();
}
(Ich habe noch weitere Vereinfachungen vorgenommen.)

EDIT: Diesmal waren @kneitzel und ich fast gleich schnell; nimm dir bitte auch die Tipps von @kneitzel zu Herzen uns schau nicht nur auf meine Lösung!
 

paulen1

Mitglied
Die erste Antwort kam, ehe ich fertig geschrieben hatte, daher hatte ich abgebrochen.

Mein Tipp ist bei sowas immer: Vergiss erst einmal den Code!

Du bekommst eine Zahl und sollst dann mit Zettel und Papier alle Teiler aufschreiben.

Wie gehst Du da dann vor?

Du suchst einen Teiler und wenn Du ihn gefunden hast, schreibst Du ihn auf.
Beim Aufschreiben schaust Du: Ist es der erste Teiler, dann schreibst Du ihn direkt auf. (Also dann hast Du etwas wie "3".)
Und bei allen weiteren Teilern weisst Du: "Ich habe schon ein Teilergebnis, also schreibst Du erst ein ", " und dann den zweiten Teiler (und hast dann das "3, 5".

Das wäre dann eine erste Idee, sowas umzusetzen. Du brauchst also nur eine weitere Variable, in der Du dir merkst, ob schon Teiler gefunden wurden. Dann wäre es nur etwas wie "if (teilerGefunden) System.out.print(", "); else teilerGefunden=true;" -> Also wenn Teiler gefunden wahr ist, dann gib das Trennzeichen aus. Ansonsten setz es auf true (denn dann hast Du ja jetzt einen ersten Teiler gefunden).

Dieser erste Ansatz ist in meinen Augen extrem wichtig. Den muss man am Anfang ganz viel üben! Du musst dir also überlegen: Was muss da überhaupt passieren? Da es schwer ist, sich das im Kopf zu überlegen: Nimm Stift und Papier zur Hand! Spiel es von Hand durch!

Ein zweiter Ansatz ist aber auch ebenso wichtig (und kommt ins Spiel, wenn Du den ersten Ansatz beherrscht): Teile und Herrsche!
Die Idee ist, dass Du die Komplexität gering hältst! Dazu ist z.B. wichtig, dass eine Methode nur eine Sache macht und zugleich kurz ist!
Hier wäre also denkbar, die Ermittlung der Teiler und die Ausgabe zu trennen. Damit vereinfacht sich der Code etwas, denn die jeweilige Verantwortung wird deutlich geringer. Das will ich aber an dieser Stelle noch nicht vertiefen, denn der erste Ansatz sollte Dir bei diesem konkreten Problem erst einmal helfen.
vielen Dank, auf die Idee mit einer weiteren Variable war ich auch gekommen, aber dann doch zu doof um zu verstehen dass man die ja an die if Bedingung knüpfen kann. Danke! :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I unerwünschte Log-Datei im Homeverzeichnis Java Basics - Anfänger-Themen 17
M Ausgabe einer ArrayList ensteht nur als Hashcode, nicht als Objekt Java Basics - Anfänger-Themen 16
M Methode zielnah zeigt das gewünschte Ausgabe nicht an Java Basics - Anfänger-Themen 3
M Ausgabe beim Overloading Java Basics - Anfänger-Themen 3
H Frage zur Ausgabe Java Basics - Anfänger-Themen 4
H Java-Programm zur Ausgabe von Zuständen Java Basics - Anfänger-Themen 80
S Einfach-Verkettete-Listen Ausgabe zeigt nur 1. und letzte instanz Java Basics - Anfänger-Themen 2
T float soll durch schleife die größte mögliche Zahl herausfinden, Ausgabe ist aber "Infinity" Java Basics - Anfänger-Themen 1
B Binärzahlen auflisten, falsche Ausgabe? Java Basics - Anfänger-Themen 1
M Java Ausgabe der höchsten Zahl Java Basics - Anfänger-Themen 14
M Erste Schritte While Schleife / Ausgabe von buchstabe & ASCII Wert Java Basics - Anfänger-Themen 4
nelsonmandela Problem bei Ausgabe einer Switch - Case Funktion Java Basics - Anfänger-Themen 5
W Streams in Java und was bedeutet meine Konsolen-Ausgabe? Java Basics - Anfänger-Themen 4
B Automatisierte Ausgabe (Schleife, If-Abfrage?) Java Basics - Anfänger-Themen 24
C 2D Array Ausgabe mit for-Schleife i,j Java Basics - Anfänger-Themen 4
B Deadlock verstehen der Ausgabe! Java Basics - Anfänger-Themen 12
Lion.King Ausgabe mit Eigenschaften Java Basics - Anfänger-Themen 4
D Java Pattern mit X Ausgabe Stern Java Basics - Anfänger-Themen 4
J In der Ausgabe wird ohne Eingabe in den else Block gesprungen. Java Basics - Anfänger-Themen 0
J In der Ausgabe wird ohne Eingabe in den else Block gesprungen. Java Basics - Anfänger-Themen 5
Xaver code Tastatur ausgabe Java Basics - Anfänger-Themen 4
R Anfänger: Ausgabe kommt minus raus? Java Basics - Anfänger-Themen 6
K Leerzeile in Konsolen-Ausgabe Java Basics - Anfänger-Themen 4
K Zweite Ausgabe von vererbten Klassen Java Basics - Anfänger-Themen 3
Q return Ausgabe Java Basics - Anfänger-Themen 4
C Java Arrays - Ausgabe in Methode Java Basics - Anfänger-Themen 12
D Best Practice Ausgabe über direkte Ausgabe oder try-catch? Java Basics - Anfänger-Themen 13
S Ausgabe des Variablenwerts Java Basics - Anfänger-Themen 10
I Ausgabe nicht nur senkrecht sondern auch waagerecht. Java Basics - Anfänger-Themen 2
C Ausgabe boolean return ((n==9)||(n==0)); Java Basics - Anfänger-Themen 13
F Double Ausgabe nicht wissenschaftlich Java Basics - Anfänger-Themen 16
danieldemetry Java - Graph Komponenten - Ausgabe Java Basics - Anfänger-Themen 0
S Fragen zu Ausgabe double und float Java Basics - Anfänger-Themen 3
B Ausgabe in TextArea funktioniert nicht Java Basics - Anfänger-Themen 2
D BigDecimal Ausgabe sehr lang. Java Basics - Anfänger-Themen 2
J String Ausgabe Java Basics - Anfänger-Themen 2
TimoN11 IntelliJ , Ausgabe von einem Quellcode in Eingabe eines Quellcodes Java Basics - Anfänger-Themen 1
Kalibru Problem bei Ausgabe von Objekt Java Basics - Anfänger-Themen 1
KogoroMori21 Array-Ausgabe Java Basics - Anfänger-Themen 6
JaVaN0oB Wörterraten - Falsche Ausgabe, String/Chars vergleichen Java Basics - Anfänger-Themen 2
E Ausgabe überschreiben Java Basics - Anfänger-Themen 15
D Ausgabe von Array Java Basics - Anfänger-Themen 2
U Ausgabe Java Basics - Anfänger-Themen 4
J Buchstabenhäufigkeit mit Array und Ausgabe des häufigsten Buchstaben Java Basics - Anfänger-Themen 25
V Multiplikationstafel - Ausgabe Java Basics - Anfänger-Themen 4
L Warum ist die Ausgabe anders als das was im Bezeichner steht? Java Basics - Anfänger-Themen 4
M In gleicher zeile hinter ausgabe noch etwas ausgeben Java Basics - Anfänger-Themen 1
newcomerJava Nach doppelter Zahl eine Ausgabe Java Basics - Anfänger-Themen 10
H Falsche Ausgabe Java Basics - Anfänger-Themen 2
P Klassenübergreifende Ausgabe mittels "getter" nicht möglich Java Basics - Anfänger-Themen 21
R Call-by-Value, Call-by-Reference, Call-by-Name Ausgabe Java Basics - Anfänger-Themen 1
JavaClap "Bruchrechner" liefert Fehler/keine Ausgabe bei Addition und Subtraktion Java Basics - Anfänger-Themen 0
D Warum erfolgt folgende Ausgabe und warum? Java Basics - Anfänger-Themen 4
C Ausgabe in der Konsole Java Basics - Anfänger-Themen 11
M Problem bei Ausgabe Java Basics - Anfänger-Themen 7
C Konvertierung des int typs in den double typ für die Ausgabe mit Nachkommastellen Java Basics - Anfänger-Themen 4
A Ausgabe mit boolean Java Basics - Anfänger-Themen 3
K Probleme bei der Ausgabe - komme nicht weiter :/ Java Basics - Anfänger-Themen 15
G Problem bei der Ausgabe einer Main Claase Java Basics - Anfänger-Themen 7
Y Methode + Parameters + Ein und Ausgabe Java Basics - Anfänger-Themen 1
K Methodenaufruf /-ausgabe Java Basics - Anfänger-Themen 5
A Wiederholte Ausgabe vermeiden Java Basics - Anfänger-Themen 16
B Collections Objektreferenz-ID in der Ausgabe (Comparator Interface) Java Basics - Anfänger-Themen 2
M Wie analysiert JSON eine toString-Ausgabe ? Java Basics - Anfänger-Themen 1
T Vererbung Verschiedene Fahrzeugtypen mit unterschiedlicher Ausgabe Java Basics - Anfänger-Themen 17
T Ausgabe einer for Schleife Java Basics - Anfänger-Themen 2
S Elemente eines Arrays bei Ausgabe auslassen Java Basics - Anfänger-Themen 2
M Ausgabe einer Liste welche mehrere Stacks enthält Java Basics - Anfänger-Themen 3
T Text-Ausgabe für Textadventure - Organisation Java Basics - Anfänger-Themen 5
G Unterklassen (Klasse für Ausgabe) Java Basics - Anfänger-Themen 4
N Eingabe des Users direkt hinter die Ausgabe Java Basics - Anfänger-Themen 3
J Methode zur Ausgabe eines Dreiecks aus Sternen schreiben? Java Basics - Anfänger-Themen 2
ZH1896ZH Wieso diese Ausgabe?? Java Basics - Anfänger-Themen 10
J Fragen zum Code aus dem Buch "Schrödinger programmiert Java 2.te Ausgabe" Java Basics - Anfänger-Themen 6
B Keine Ausgabe .. Woran liegt das? Ich komme nicht weiter Java Basics - Anfänger-Themen 14
K Rechtsbündige Ausgabe von Zahlen Java Basics - Anfänger-Themen 6
V Erste Schritte for-Schleife; Ausgabe soll alle 5 Sekunden erfolgen. Java Basics - Anfänger-Themen 4
X Threads Zwei Threads, aber doppelte Ausgabe verhindern (synchronized) Java Basics - Anfänger-Themen 54
J Ausgabe Gesamtpreis Java Basics - Anfänger-Themen 39
E Variablen in formatierter Ausgabe Java Basics - Anfänger-Themen 15
B HQL / Hibernate, GroupBy und Ausgabe als Double Java Basics - Anfänger-Themen 1
J StrinBuffer in der Ausgabe Java Basics - Anfänger-Themen 4
H ausgabe? Java Basics - Anfänger-Themen 32
B Ausgabe Zahlenreihe Horizontal Java Basics - Anfänger-Themen 3
V Neue Ausgabe von toString nach Methodenaufruf Java Basics - Anfänger-Themen 9
N Wochentagberechner Ausgabe funktioniert nicht Java Basics - Anfänger-Themen 7
K Array Ausgabe Java Basics - Anfänger-Themen 2
L Datentypen Ausgabe von eigenem Datentypen Java Basics - Anfänger-Themen 2
C 1x1 Ausgabe auf dem Bildschirm Java Basics - Anfänger-Themen 3
L Fehler im Programm bei Ausgabe Java Basics - Anfänger-Themen 21
J Doppelte Ausgabe erzeugen Iterator Java Basics - Anfänger-Themen 6
F Warum ist die Ausgabe hier 1? Java Basics - Anfänger-Themen 4
Bun17 Keine Ausgabe in der Konsole Java Basics - Anfänger-Themen 2
H Ausgabe Java Basics - Anfänger-Themen 6
U Ausgabe von Dateiinhalt während Programmnutzung fehlerhaft Java Basics - Anfänger-Themen 3
Jackii ArrayList ausgabe ohne Dopplung Java Basics - Anfänger-Themen 11
F Erste Schritte Subnet Calculator - Ausgabe der NetID und der Broadcast Java Basics - Anfänger-Themen 4
D Wiederholende Ausgabe Java Basics - Anfänger-Themen 3
G Exception und Ausgabe der Duplikate Java Basics - Anfänger-Themen 6
A Datei Ein und Ausgabe FileWriter und printWriter Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben