Eine Zahl solange teilen bis es nicht möglich ist und die Ergebnisse ausgeben

N

NilsVonBismarck

Mitglied
Hey Jungs und Mädels!

Ich habe eine Auf gabe bei der ich nicht mehr weiter komme. Sie lautet:
Herr Becker möchte seine Klasse von 18 Schülern in Gruppen aufteilen. Schreibe ein Programm, das ausgibt, welche Möglichkeiten es für die Gruppengröße gibt und lass sie ausgeben.

Soooo....Diese Aufgabe MUSS mit while-Schleifen gelöst werden. Ich hatte die Idee, dass man das testen lässt in dem man solange durch eine ganze Zahl teilt bis ein Rest herauskommt also es beginnt bei 1 und er zieht es solange durch bis ein Rest rauskommt. Aber ich habe keine Ahnung wie man das umsetzten kann.

Mit freundlichen Grüßen
Nils von Bismarck
 
H

httpdigest

Top Contributor
Dass man hier teilen muss bzw. herausfinden muss, ob bei der Division ein Rest entsteht, hast du ja schon richtig erkannt.
Was wir hier ja prinzipiell wollen, ist herauszufinden, welche ganzzahligen Teiler die Anzahl der in (gleich große) Gruppen einzuteilenden Schüler hat.
Also: 18 = 2 * 9 = 3 * 6
Du kannst also einfach den Rest-Operator (%) in Java hierfür verwenden.
 
temi

temi

Top Contributor
Soll es sich um Gruppen mit gleicher Anzahl von Schülern handeln?

Dann musst du einfach alle Fälle von 1 bis zur maximalen Anzahl der Schüler ausprobieren, ob sie sich ohne Rest teilen lassen. Die beiden Extremfälle sind demnach 18/18 = 1 Gruppe mit 18 Schülern und 18/1 = 18 Gruppen mit einem Schüler. Diese beiden Fälle kannst du aber vermutlich weglassen.
 
N

NilsVonBismarck

Mitglied
Mir ist schon klar das ich mathematisch gesehen das machen muss und den Operator % hätte ich auch genommen aber ich muss das ja in eine while-Schleife einbauen. Und da hört es dann bei mir auf.
 
H

httpdigest

Top Contributor
Naja, verwende eine while-Schleife einfach als andere Form einer for-Schleife (über die Zahlen 1..N, wobei N die Anzahl der Schüler ist).
Dabei kannst du ja folgende Äquivalenz zwischen for- und while-Schleife ausnutzen:
Java:
for (initialization; condition; increment) {
  body
}

initialization;
while (condition) {
  body
  increment
}
 
A

abc66

Top Contributor
- Gibt es immer nur zwei Gruppen?
- Soll die Schüleranzahl pro Gruppe immer gleich sein?
 
N

NilsVonBismarck

Mitglied
Nein man soll alle möglichen Gruppen herausfinden, die bei 18 Schülern möglich sind und Ja die Schüleranzahl in den Gruppen soll gleich sei wie z.B. 9 Schüler in 2 Gruppen oder 3 Schüler in 6 Gruppen.
 
A

abc66

Top Contributor
Der Modulo Operator wird dir nicht viel helfen, da es Gruppengrößen mit zum Beispiel je 1,8 Schülern pro Gruppe geben könnte.
D. h. ... zum Beispiel die Hälfte der Gruppen haben einen Schüler und ein paar Gruppen haben zwei Schülern.
Ich würd einfach zählen.
 
H

httpdigest

Top Contributor
Der Modulo Operator wird dir nicht viel helfen, da es Gruppengrößen mit zum Beispiel je 1,8 Schülern pro Gruppe geben könnte.
Deswegen würde man bei einer korrekten Verwendung des Rest-Operators (nicht Modulo-Operator) auch prüfen, ob die Division ohne Rest aufgeht. Dann können nur Gruppen mit einer ganzzahligen Größe entstehen.
Oder anders gesagt: Wenn die Schüleranzahl eine Primzahl ist, wird es nur eine Gruppe geben.
 
H

httpdigest

Top Contributor
Was meinst du mit "solche"?
@NilsVonBismarck hat bereits klar geschrieben, dass die Anzahl der Schüler in den Gruppen gleich sein soll.
Und selbstverständlich ist die Anzahl der Personen pro Gruppe ganzzahlig.
 
N

NilsVonBismarck

Mitglied
@abc66 Das ist mir schon klar mir ging es aber darum wie man das mit einer while Schleife lösen kann und dann einfach immer wieder eine andere Schüleranzahl eingibt wie z.B. 24 und das Programm berechnet dann die verschiedenen Gruppengrößen, die möglich sind.
 
mihe7

mihe7

Top Contributor
Ich hatte die Idee, dass man das testen lässt in dem man solange durch eine ganze Zahl teilt bis ein Rest herauskommt also es beginnt bei 1 und er zieht es solange durch bis ein Rest rauskommt. Aber ich habe keine Ahnung wie man das umsetzten kann.
Da Du Dir schon die Mühe gemacht hast, etwas wie einen Algorithmus zu beschrieben und es Dir nur um die Kodierung geht, kann man Dir sogar ein wenig weiter helfen.

Bleiben wir erstmal bei Deinem Algorithmus. Den muss man etwas präziser formulieren. Ich verstehe Dich so, dass Du einen ganzzahligen Teiler verwenden willst, der zu Beginn auf 1 gesetzt wird. So lange, bis beim Teilen der Gruppengröße durch diesen Teiler ein Rest entsteht, willst Du die nächst größere ganze Zahl als Teiler verwenden, also den Teiler um 1 erhöhen.

Etwas schöner aufgeschrieben (n sei die Gruppengröße):
Code:
teiler := 1
wiederhole, bis n mod teiler > 0
    teiler := teiler + 1

Die Formulierung "wiederhole, bis" entspricht nicht einer while-Schleife, lässt sich aber problemlos zu einer solchen umformen. Aus "wiederhole, bis Bedingung x gilt" wird einfach "wiederhole, so lange Bedingung x nicht gilt".

Im konkreten Fall erhält man also
Code:
teiler := 1
wiederhole, so lange n mod teiler = 0
    teiler := teiler + 1

Das lässt sich nun 1:1 in Code umsetzen:
Java:
int teiler = 1;
while ((n % teiler) == 0) {
    teiler++;
}

Der Vollständigkeit halber sei erwähnt, dass das nicht die Lösung der Aufgabe ist: Dein Algorithmus würde für n == 18 bei teiler == 5 aufhören, obwohl es noch weitere Teiler (6) gibt. :)
 
A

abc66

Top Contributor
Ich fand etwas heraus, was keiner mehr lesen kann:
Java:
void printGruppengroessen(int anzahlDerSchueler) {
	boolean deformiert = false;
	if (anzahlDerSchueler % 2 == 1) {
		deformiert = true;
		anzahlDerSchueler++;
	}
	for (int anzahlDerGruppen = 2; anzahlDerGruppen <= anzahlDerSchueler; anzahlDerGruppen++) {
		if (anzahlDerSchueler % anzahlDerGruppen == 0) {
			System.out.println(anzahlDerGruppen + " : ");
			for (int i = 1; i <= anzahlDerGruppen; i++) {
				if (deformiert && i == anzahlDerGruppen) {
					if (((anzahlDerSchueler / anzahlDerGruppen) - 1) > 0) {
						System.out.print(((anzahlDerSchueler / anzahlDerGruppen) - 1) + " ");
					}
				} else {
					System.out.print((anzahlDerSchueler / anzahlDerGruppen) + " ");
				}
			}
			System.out.println("");
		}
	}
}
 
N

NilsVonBismarck

Mitglied
Der Vollständigkeit halber sei erwähnt, dass das nicht die Lösung der Aufgabe ist: Dein Algorithmus würde für n == 18 bei teiler == 5 aufhören, obwohl es noch weitere Teiler (6) gibt.
Wie man das fixt das er alle Möglichkeiten durchgeht oder versteh ich da was falsch?
 
H

httpdigest

Top Contributor
Nun gebt ihm doch die Komplettlösung. :)
Bisher hat er nicht mal den geringsten Versuch unternommen, selber eine Lösung zu erarbeiten oder die ihm präsentierten Teillösungen und Ideen zu vervollständigen.
 
mihe7

mihe7

Top Contributor
@NilsVonBismarck Der Code aus #22 war natürlich nur ein kleiner Gag. Wenn das mit dem Rest als Abbruchbedingung nicht klappt, musst Du Dir einen anderen Ansatz überlegen. Die sprachliche Konstrukte aus den bisherigen Kommentaren (außer aus #22) reichen in jedem Fall, um das Problem zu lösen.
 
temi

temi

Top Contributor
Dann musst du einfach alle Fälle von 1 bis zur maximalen Anzahl der Schüler ausprobieren, ob sie sich ohne Rest teilen lassen.
Naja, verwende eine while-Schleife einfach als andere Form einer for-Schleife (über die Zahlen 1..N, wobei N die Anzahl der Schüler ist).
Dabei kannst du ja folgende Äquivalenz zwischen for- und while-Schleife ausnutzen:
Java:
for (initialization; condition; increment) {
  body
}

initialization;
while (condition) {
  body
  increment
}

Bring das einfach zusammen, dann hast du deine gesuchte Lösung:

"von" = initialization
"bis" = condition
"body" = ausprobieren
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
newcomerJava Nach doppelter Zahl eine Ausgabe Java Basics - Anfänger-Themen 10
F Eine Zahl mit Arrays vergleichen Java Basics - Anfänger-Themen 7
V Array auf eine Zahl durchsuchen Java Basics - Anfänger-Themen 15
X Nach einem Bruch testen ob es eine ganze Zahl ist Java Basics - Anfänger-Themen 6
B Eine ganze Zahl zerlegen. Java Basics - Anfänger-Themen 4
A Überprüfen, ober eine Zahl Ziffer enthält Java Basics - Anfänger-Themen 12
J Button klick bei eine bestimmten Zahl Java Basics - Anfänger-Themen 8
H OOP eine Zahl immer weiter durch 2 teilen Java Basics - Anfänger-Themen 15
J Für jeden Buchstaben eine Zahl Java Basics - Anfänger-Themen 1
I Erste Schritte Testen, ob eine Zahl eine Primzahl ist Java Basics - Anfänger-Themen 8
H 32-Bit Zahl (Integer) in eine IPv4 Adresse umwandeln? Java Basics - Anfänger-Themen 2
Aprendiendo Gibt es in der JAVA-API eine Funktion, die eine Dezimalzahl in eine binäre Zahl umwandelt? Java Basics - Anfänger-Themen 8
M Mit 2 Threads eine Zahl hochzählen Java Basics - Anfänger-Themen 13
F Abfrage ob Eingabe eine Zahl ist Java Basics - Anfänger-Themen 3
J Wie lege ich eine durch Random ausgesuchte Zahl in ein Array? Java Basics - Anfänger-Themen 3
L Eine Zahl in Binärdarstellung ausgeben Java Basics - Anfänger-Themen 10
J Überprüfen ob String eine Zahl ist Java Basics - Anfänger-Themen 2
Q Scanner auf eine Zahl beschränken Java Basics - Anfänger-Themen 2
S Funktion die mir fuer einen String eine Zahl zwischen 0.0 und 1.0 zurueckliefert..? Java Basics - Anfänger-Themen 9
I Höchste Zahl berechnen die eine Eingabe ohne Rest teilt und eine Primzahl ist Java Basics - Anfänger-Themen 2
T Ein String eine Zahl zuweisen Java Basics - Anfänger-Themen 15
llabusch Operatoren Methode um eine Zahl zu quadrieren Java Basics - Anfänger-Themen 1
M Prüfen, ob Zeichen eine Zahl ist Java Basics - Anfänger-Themen 3
C Datentypen Prüfen of eine Zahl Quadratzahl ist Java Basics - Anfänger-Themen 2
M Input/Output Eine Zahl eingeben mit Ausnahmen Java Basics - Anfänger-Themen 12
I Variablen Wie initialisiert man in Java eine Variable ohne das Setzen von 0 oder einer anderen Zahl? Java Basics - Anfänger-Themen 8
N jnumberfield prüfen, ob eine Zahl eigegeben wurde Java Basics - Anfänger-Themen 12
K Konvertierung von einem Text in eine Zahl in Excel(JXL) Java Basics - Anfänger-Themen 2
T Prüfen, ob ein String eine Zahl ist Java Basics - Anfänger-Themen 10
Haubitze_Broese Potenz einer Zahl, der Exponent ist dabei eine beliebige ganze Zahl? Java Basics - Anfänger-Themen 10
Luk10 Zufallszahl "ohne" eine bestimmte Zahl(en) Java Basics - Anfänger-Themen 8
N in int array einen pattern(eine zahl) finden Java Basics - Anfänger-Themen 21
S Wie überprüfe ich eine Zahl (in einer Char-Variable) auf einstelligkeit? Java Basics - Anfänger-Themen 8
S Welche möglichkeiten gibt es eine Zahl zu spiegeln? Java Basics - Anfänger-Themen 17
C Binärzahl vom Typ String in eine Zahl vom Typ Integer umwandeln Java Basics - Anfänger-Themen 4
T Testen ob eine Zahl im array doppel vorkommt. Java Basics - Anfänger-Themen 7
G Frage:Welche Methodne kann man eine Zahl bzw. ein String Java Basics - Anfänger-Themen 3
G überprüfen ob string eine zahl enthält Java Basics - Anfänger-Themen 6
G Wie eine Int Zahl in die einzelnen Ziffern zerlegen? Java Basics - Anfänger-Themen 6
M Überprüfen ob die eingaben in einem JTextField eine Zahl ist Java Basics - Anfänger-Themen 5
C wie pruefe ich ob ein Vektorelement eine Zahl ist Java Basics - Anfänger-Themen 3
M Nach einer erstmaligen Eingabe, eine zweite Eingabe nur noch gegen bestätigung möglich Java Basics - Anfänger-Themen 2
TimoN11 Java - Eine oder mehrere Eingaben möglich machen Java Basics - Anfänger-Themen 6
A Wie schaffe ich das eine while Schleife addiert danach subtrahirt? Java Basics - Anfänger-Themen 1
Y Einfügen in eine doppelt verkettete Liste Java Basics - Anfänger-Themen 8
T Ich habe eine Variabel die nicht Methoden übergreifend ist. Kann mir jemand Helfen :) Java Basics - Anfänger-Themen 5
H Daten aus einer Datei in eine Liste speichern Java Basics - Anfänger-Themen 23
Tino1993 for-Schleife, die eine vorgegebene Anzahl von Zeichen ausgibt Java Basics - Anfänger-Themen 3
jonny_2k12 Wie kann ich eine ArrayList aus einer Klasse in eine andere übergeben? Java Basics - Anfänger-Themen 21
S Eine Liste kopieren Java Basics - Anfänger-Themen 13
A eine neue normale String-Array von einer String-Array, die in for schleife ist, schaffen Java Basics - Anfänger-Themen 3
java3690 eine liste sortieren Java Basics - Anfänger-Themen 12
N Input/Output Eine Frage über system.out.println. Java Basics - Anfänger-Themen 10
K Übergabe des Wertes einer Variable aus main() in eine Klassenmethode Java Basics - Anfänger-Themen 8
J Wie kann ich hier eine While schleife einbauen? Java Basics - Anfänger-Themen 3
P Was genau bringt mir es ein Array in eine Liste zu bringen Java Basics - Anfänger-Themen 3
J Eine Frage zur Schreibweise == ? : Java Basics - Anfänger-Themen 3
I Wo am besten eine String Konstante initialisieren? Java Basics - Anfänger-Themen 5
N Wie teste ich eine geworfene Exception? Java Basics - Anfänger-Themen 8
B Eine Methode erstellen Java Basics - Anfänger-Themen 3
L Konstruktor für eine Map-Datei/Map-Datei einlesen Java Basics - Anfänger-Themen 5
Y Methoden Wie kann ich eine if-Abfrage bei Setters bauen? Java Basics - Anfänger-Themen 6
I Sortiert eine HashMap nicht gleich wie eine ArrayList? Java Basics - Anfänger-Themen 1
L Iterieren durch eine ArrayList. Integer Array wird übergeben Java Basics - Anfänger-Themen 17
KogoroMori21 Mit einer Schleife eine Treppe zeichnen Java Basics - Anfänger-Themen 29
J Eine Position im String durch einen Integer - Wert teilen Java Basics - Anfänger-Themen 5
M Verständnisfrage zu eine Online Aufgabe Java Basics - Anfänger-Themen 7
N Wie kann ich eine meine Variable Final machen? Java Basics - Anfänger-Themen 1
H Datentypen Was für eine Format verbirgt sich hinter dem Integer-Wert 053? Java Basics - Anfänger-Themen 2
C Methoden Java ist auch eine Insel Listing 2.40 Recursion Java Basics - Anfänger-Themen 7
P Eine komplizierte Sache Java Basics - Anfänger-Themen 1
B Nur eine bestimmte Anzahl an Arrays ausgeben Java Basics - Anfänger-Themen 9
M Zugriff auf eine ArrayList in einer anderen Klasse Java Basics - Anfänger-Themen 4
T Wie eine Komposition garantieren Java Basics - Anfänger-Themen 5
M Wie analysiert JSON eine toString-Ausgabe ? Java Basics - Anfänger-Themen 1
bensdt Klasse erweitern um eine Methode "void decrement()" Java Basics - Anfänger-Themen 5
S Datenbank Tabelle eine Zeile an einer bestimmten Stelle einfügen Java Basics - Anfänger-Themen 2
B Von Array nur eine bestimmte Anzahl bekommen Java Basics - Anfänger-Themen 3
C "HelloWorld" - Dateien erstellt, aber ist es eine class-Datei? Java Basics - Anfänger-Themen 2
L Muss eine HttpURLConnection geschlossen werden? Java Basics - Anfänger-Themen 2
D OOP- Eine Klasse in mehrere Klassen aufteilen Java Basics - Anfänger-Themen 7
V Erste Schritte Eine Array-Variable mit Benutzereingaben befüllen Java Basics - Anfänger-Themen 3
O Ziehen im Array um einen Schritt in eine einzige beliebige Richtung Java Basics - Anfänger-Themen 5
E Kreis soll eine Raupe darstellen Java Basics - Anfänger-Themen 37
P Alles eine Typfrage Java Basics - Anfänger-Themen 7
I Klassen Eine ArrayList<Long>, die sich automatisch sortiert Java Basics - Anfänger-Themen 20
D Guten Tag mache gerade eine Umschulung zum FiSi war leider jetzt 2 Wochen Krank und wir hatten Prozendurale Programmierung. Java Basics - Anfänger-Themen 3
L Iterieren über eine CSV Datei Java Basics - Anfänger-Themen 7
W Zwei Programme sollen auf eine Klasse zugreifen Java Basics - Anfänger-Themen 18
V Wie wiederhole ich eine for-Schleife beim erreichen eines Wertes Java Basics - Anfänger-Themen 9
A Kann man eine Methode als Variable speichern und danach noch verändern? Java Basics - Anfänger-Themen 6
L Klassen Wie “installiert” man eine Klasse? Java Basics - Anfänger-Themen 2
E Datentypen Einfügen von Objekten in eine Map Java Basics - Anfänger-Themen 2
X Wo steht, ob eine Datei big, little oder bi-endian codiert ist? Java Basics - Anfänger-Themen 3
N Bewegtes Objekt soll sich um eine Parallele bewegen Java Basics - Anfänger-Themen 0
O Iterator für eine geordnete Menge Java Basics - Anfänger-Themen 134
J Lesen und schreiben in eine Datei(Anfänger- Dateizugriffe) Java Basics - Anfänger-Themen 3
M Wie lang eine Funktion/Methode? Java Basics - Anfänger-Themen 51
R Warnung, wenn eine Variable eingegeben wird Java Basics - Anfänger-Themen 6
D Richtig Vorbereiten auf eine Programmier Klausur Studium. Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Anzeige

Neue Themen


Oben