Ist diese Aufgabe zu umständlich gelöst?

moccajoghurt

Bekanntes Mitglied
Hi,
die Aufgabe lautet wie folgt:

Aufgabe 18:
Schreiben Sie ein Java-Programm, das die Anzahl der Überträge beim Addieren zweier Zahlen berechnet.
Algorithmus: Zunächst sollen vom Benutzer zwei nicht negative Zahlen mit jeweils weniger als 10 Ziffern eingelesen werden. Sie können dazu die aus der Vorlesung bekannte Klasse IO verwenden. Anschließend soll die Anzahl an Überträgen beim
ziffernweisen Addieren der beiden Zahlen von rechts nach links berechnet werden. Zum Schluss soll die Anzahl an Überträgen auf den Bildschirm ausgegeben werden.
Beispiel:
Zahl: 123
Zahl: 594
Anzahl an Uebertraegen: 1

Kenne die Anweisungen: for, do, while, switch, if, break, continue, return... kann man es mit diesen Anweisungen einfacher lösen als so:

Java:
public class zahlenAddieren {
	
	static int zaehler1 = 0;
	static int zaehler2 = 0;
	static int zaehler3 = 0;
	static int zaehler4 = 0;
	static int zaehler5 = 0;
	static int zaehler6 = 0;
	static int zaehler7 = 0;
	static int zaehler8 = 0;
	static int zaehler9 = 0;
	
	static int zaehler1b = 0;
	static int zaehler2b = 0;
	static int zaehler3b = 0;
	static int zaehler4b = 0;
	static int zaehler5b = 0;
	static int zaehler6b = 0;
	static int zaehler7b = 0;
	static int zaehler8b = 0;
	static int zaehler9b = 0;
	
	static int uebertraege = 0;
	
	public static void main(String[] args) {
		
		System.out.println("Die Zahlen duerfen maximal 9-stellig sein!");
		long zahl1 = IO.readLong("1. Zahl: ");
		long zahl2 = IO.readLong("2. Zahl: ");
		
		// Ziffern von erster Zahl einlesen
		for (long i = zahl1; i % 10 != 0; i--) {
			zaehler1++;
		}
		for (long i = zahl1 - zaehler1; i % 100 != 0; i-=10) {
			zaehler2++;
		}		
		for (long i = zahl1 - zaehler1 - zaehler2 * 10; i % 1000 != 0; i-=100) {
			zaehler3++;
		}		
		for (long i = zahl1 - zaehler1 - zaehler2*10 - zaehler3*100; i % 10000 != 0; i-=1000) {
			zaehler4++;
		}		
		for (long i = zahl1 - zaehler1 - zaehler2*10 - zaehler3*100 - zaehler4*1000; i % 100000 != 0; i-=10000) {
			zaehler5++;
		}		
		for (long i = zahl1 - zaehler1 - zaehler2*10 - zaehler3*100 - zaehler4*1000 - zaehler5*10000; i % 1000000 != 0; i-=100000) {
			zaehler6++;
		}
		for (long i = zahl1 - zaehler1 - zaehler2*10 - zaehler3*100 - zaehler4*1000 - zaehler5*10000 - zaehler6*100000; i % 10000000 != 0; i-=1000000) {
			zaehler7++;
		}		
		for (long i = zahl1 - zaehler1 - zaehler2*10 - zaehler3*100 - zaehler4*1000 - zaehler5*10000 - zaehler6*100000 - zaehler7*1000000; i % 100000000 != 0; i-=10000000) {
			zaehler8++;
		}		
		for (long i = zahl1 - zaehler1 - zaehler2*10 - zaehler3*100 - zaehler4*1000 - zaehler5*10000 - zaehler6*100000 - zaehler7*1000000 - zaehler8*10000000; i % 1000000000 != 0; i-=100000000) {
			zaehler9++;
		}
		
		// Ziffern von zweiter Zahl einlesen		
		for (long i = zahl2; i % 10 != 0; i--) {
			zaehler1b++;
		}
		for (long i = zahl2 - zaehler1b; i % 100 != 0; i-=10) {
			zaehler2b++;
		}		
		for (long i = zahl2 - zaehler1b - zaehler2b * 10; i % 1000 != 0; i-=100) {
			zaehler3b++;
		}		
		for (long i = zahl2 - zaehler1b - zaehler2b*10 - zaehler3b*100; i % 10000 != 0; i-=1000) {
			zaehler4b++;
		}		
		for (long i = zahl2 - zaehler1b - zaehler2b*10 - zaehler3b*100 - zaehler4b*1000; i % 100000 != 0; i-=10000) {
			zaehler5b++;
		}		
		for (long i = zahl2 - zaehler1b - zaehler2b*10 - zaehler3b*100 - zaehler4b*1000 - zaehler5b*10000; i % 1000000 != 0; i-=100000) {
			zaehler6b++;
		}
		for (long i = zahl2 - zaehler1b - zaehler2b*10 - zaehler3b*100 - zaehler4b*1000 - zaehler5b*10000 - zaehler6b*100000; i % 10000000 != 0; i-=1000000) {
			zaehler7b++;
		}		
		for (long i = zahl2 - zaehler1b - zaehler2b*10 - zaehler3b*100 - zaehler4b*1000 - zaehler5b*10000 - zaehler6b*100000 - zaehler7b*1000000; i % 100000000 != 0; i-=10000000) {
			zaehler8b++;
		}		
		for (long i = zahl2 - zaehler1b - zaehler2b*10 - zaehler3b*100 - zaehler4b*1000 - zaehler5b*10000 - zaehler6b*100000 - zaehler7b*1000000 - zaehler8b*10000000; i % 1000000000 != 0; i-=100000000) {
			zaehler9b++;
		}				
		
		// Ziffern addieren
		if (zaehler1 + zaehler1b >= 10) {
			uebertraege++;
		}
		if (zaehler2 + zaehler2b >= 10) {
			uebertraege++;
		}
		if (zaehler3 + zaehler3b >= 10) {
			uebertraege++;
		}
		if (zaehler4 + zaehler4b >= 10) {
			uebertraege++;
		}
		if (zaehler5 + zaehler5b >= 10) {
			uebertraege++;
		}
		if (zaehler6 + zaehler6b >= 10) {
			uebertraege++;
		}
		if (zaehler7 + zaehler7b >= 10) {
			uebertraege++;
		}
		if (zaehler8 + zaehler8b >= 10) {
			uebertraege++;
		}
		if (zaehler9 + zaehler9b >= 10) {
			uebertraege++;
		}	
		// Ziffern ausgeben
		System.out.println();
		System.out.println(zahl1 + " + " + zahl2 + " haben " + uebertraege + " Uebertraege!");
		System.out.println();
		}
}
 

faetzminator

Gesperrter Benutzer
Ich hätte das ganze "etwas" mathematischer gelöst...
Java:
public static int getUebertraege(int x, int y) {
    int min = Math.min(x, y), max = Math.max(x, y);
    int uebertraege = 0, uebertrag = 0;
    while (min > 0 || uebertrag > 0) {
        int sum = min % 10 + max % 10 + uebertrag;
        if (sum >= 10) {
            uebertraege++;
        }
        uebertrag = sum / 10;
        min /= 10;
        max /= 10;
    }
    return uebertraege;
}
 

faetzminator

Gesperrter Benutzer
In meinem Beispiel oben könntest du in der Schleife [c]x[/c] und [c]y[/c] verwenden. Die Schleife wird dann Anzahl Stellen des ersten Wertes plus 0-... Mal (Überlauf) aufgerufen. Wenn du aber zwei Zahlen [c]456823[/c] und [c]7[/c] eingibst, muss diese Schleife nur zwei Mal betreten werden (7 selbst ist 1 Stelle gross und der Überlauf wird beim nächsten Aufruf "aufgegessen") - ohne min()/max() je nach Parameterreihenfolge wird diese unnötigerweise aber 6 Mal aufgerufen.
 

LP_SE

Aktives Mitglied
Math.max(x, y) und .min(x, y) liefern den Größten (Kleinsten) der Werte zurück. Das kann man, wenn man nur diese Anweisungen benutzen darf, sich auch schnell selbst schreiben:

Java:
public int max(int x, int y) {
    return x>y?x:y;
    // oder so:
    if(x>y) return x;
    else return y;
}

mit min geht es analog
 

Shulyn

Bekanntes Mitglied
Es würde mir eher helfen zu wissen wie man es hätte weniger umständlich lösen können, als mir einfach nur zu bestätigen was ich bereits ahne.

Aber bitte berücksichtigen, dass andere Anweisungen als for, do, while, switch, if, break, continue, return für die Aufgabe nicht vorgesehen sind.

Etwas "einfacher" machen...
Generell würde ich alles was sehr sehr ähnlich aussieht in eine Methode packen...
Hier ein kleines Beispiel.
[Java]
if (zaehler1 + zaehler1b >= 10) {
uebertraege++;
}
if (zaehler2 + zaehler2b >= 10) {
uebertraege++;
}
if (zaehler3 + zaehler3b >= 10) {
uebertraege++;
}
if (zaehler4 + zaehler4b >= 10) {
uebertraege++;
}


// Vllt so:

public int groesserZehn(int zahl1, int zahl2, int uebertraege) {
if (zahl1 + zahl2 >= 10) {
uebertraege++;
}
return uebertraege;
}
[/Java]
so musst du den code nicht x-mal schreiben. Und es wird klarer was du machst.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Könnte mir jemand diese Aufgabe erklären? Java Basics - Anfänger-Themen 2
M Könnte mir jemand diese Aufgabe erklären? Java Basics - Anfänger-Themen 9
J Hat jemand einen Lösungsansatz für diese Aufgabe? Java Basics - Anfänger-Themen 1
N Verstehe diese Aufgabe nicht! Java Basics - Anfänger-Themen 16
P Wie kann diese Schleife beenden Java Basics - Anfänger-Themen 1
N Was Passiert mit dem Namen einer Variable, wenn man diese einer Liste Hinzufügt Java Basics - Anfänger-Themen 16
M Wie kommen diese Ausgaben zustande? Java Basics - Anfänger-Themen 12
W Warum diese Fehlermeldung? Java Basics - Anfänger-Themen 12
berserkerdq2 Habe eine Klasse, welche public ist, diese hat eine public Methode, die nicht static ist. Wenn ich nun versuche aufzurufen Probleme? Java Basics - Anfänger-Themen 8
Alen123 Wie würdet ihr diese Aufgabenstellung lösen? Java Basics - Anfänger-Themen 18
J Hallo zusammen , was macht diese Methode hier genau? Java Basics - Anfänger-Themen 3
Fats Waller Wofür stehen diese Konstanten im Java Labyrinth ? Java Basics - Anfänger-Themen 5
dieter000 Wie schreibe ich diese ZEile um? Java Basics - Anfänger-Themen 1
M Objekt mit eindeutiger ID löschen, das nächste Objekt hat dann diese ID Java Basics - Anfänger-Themen 5
J Womit kann ich diese Methode testen? Java Basics - Anfänger-Themen 5
ZH1896ZH Wieso diese Ausgabe?? Java Basics - Anfänger-Themen 10
T Was macht diese Zeile? Java Basics - Anfänger-Themen 9
G Woher kommt diese Eigenschaft Java Basics - Anfänger-Themen 5
O Was tut diese Methode? und wie müssen die assertions aussehen? Java Basics - Anfänger-Themen 21
F Wie implementiere ich diese Aufgabenstellung? Java Basics - Anfänger-Themen 16
F Wie kann ich diese NullPointerException umgehen?! Java Basics - Anfänger-Themen 41
F Warum erhalte ich diese Fehler bei der Einbindung von SQLite JDBC in Eclipse? Java Basics - Anfänger-Themen 1
F Warum verläuft DIESE Schleife endlos? Java Basics - Anfänger-Themen 4
D Was bedeutet diese Schreibweise? Java Basics - Anfänger-Themen 9
A Erste Schritte Bitte helfen sie mir diese Programm zu schreiben Java Basics - Anfänger-Themen 12
W Wie vermerke ich diese Struktogramm Passage in Java Syntax? Java Basics - Anfänger-Themen 8
N Methoden warum wird diese Methode aufgerufen Java Basics - Anfänger-Themen 9
L Input/Output Wieso kommt diese Ausgabe? Java Basics - Anfänger-Themen 12
L Datentypen Date API - diese Woche bestimmen Java Basics - Anfänger-Themen 1
M Aus Datei auslesen und untersuchen ob diese Zeile schon vorhanden ist Java Basics - Anfänger-Themen 3
B Kann mir jemand diese Bedingung erklären Java Basics - Anfänger-Themen 5
B Wie könnte man mit Java diese Matheaufgabe lösen Java Basics - Anfänger-Themen 7
B Wie würdet ihr diese Methode erklären? Java Basics - Anfänger-Themen 2
C Methoden Welche JSoup Methoden Und Parameter für diese HTML Tags Java Basics - Anfänger-Themen 4
kilopack15 Ist diese setter-Methode richtig? Java Basics - Anfänger-Themen 2
B Wie funktionieren diese Methoden in diesem Sortierverfahren genau? Java Basics - Anfänger-Themen 2
B Was macht diese Methode? Java Basics - Anfänger-Themen 9
P Was macht diese methode Java Basics - Anfänger-Themen 2
P Terminieren diese Schleifen Java Basics - Anfänger-Themen 6
U Ist diese Methode zur Matrix Vektor Multiplikation korrekt ? Java Basics - Anfänger-Themen 5
T Zeilen des ListArray nach einem Wort durchsuchen und diese Zeile ausgeben Java Basics - Anfänger-Themen 4
K Methoden mit den Namen accept. Welche Funktion haben diese? Java Basics - Anfänger-Themen 2
X wie kann ich in bluej/java einene 2d array mit zahlen fuellen, so dass sich diese in der der zeilen Java Basics - Anfänger-Themen 2
G Vertsändnisfrage zu Code - Wie kommt diese Ausgabe zustande? Java Basics - Anfänger-Themen 2
J Kann mir bitte mal jemand diese Codes erklären? Java Basics - Anfänger-Themen 19
D Erste Schritte Dynamisch Objekte erzeugen und diese durchsuchen Java Basics - Anfänger-Themen 7
X Wann schreibt man diese Syntax zeichen { } Java Basics - Anfänger-Themen 8
A Wieso kann ich nicht auf diese Variable zugreifen? Java Basics - Anfänger-Themen 6
A Erste Schritte Wieso funktioniert diese Klasse nicht Java Basics - Anfänger-Themen 11
H Wie erstelle ich diese Klassen? Java Basics - Anfänger-Themen 44
R Kann jemand diese Java Programmierung machen? Versteh ich leider nicht Java Basics - Anfänger-Themen 17
M Erste Schritte Wie kommt man auf diese Ausgabe? Java Basics - Anfänger-Themen 3
S Methoden Return Anweisung beendet Methode nicht, stattdessen wird diese zweimal durchlaufen Java Basics - Anfänger-Themen 3
SexyPenny90 Wieso ist diese eigene Equals-Methode schlecht? Java Basics - Anfänger-Themen 17
F verstehe diese Variable nicht... Java Basics - Anfänger-Themen 4
B for-schleife - Was tut diese? Java Basics - Anfänger-Themen 11
A Wie kommt diese NullPointerException zustande? Java Basics - Anfänger-Themen 13
D Warum ist diese Interfacedeklaration falsch? Java Basics - Anfänger-Themen 5
T Warum brauche ich diese IOException? Java Basics - Anfänger-Themen 30
R Welche Datenstruktor für diese Liste? Java Basics - Anfänger-Themen 6
B Erste Schritte Welche Kenntnisse brauche ich für diese Programmidee? Java Basics - Anfänger-Themen 4
L Immer diese Arrays Java Basics - Anfänger-Themen 11
H Was macht diese Methode? Java Basics - Anfänger-Themen 3
A was berechnet diese programm? Java Basics - Anfänger-Themen 13
G Was bedeutet diese Zeile? Java Basics - Anfänger-Themen 2
J Warum muss diese Methode static sein ?! Java Basics - Anfänger-Themen 7
H Warum funktioniert diese kleine Methode nicht? Java Basics - Anfänger-Themen 8
P ich versteh diese Methode nicht ;? Java Basics - Anfänger-Themen 7
P Datentypen Warum findet er diese methoden nicht? Java Basics - Anfänger-Themen 13
N We behandele ich diese Exception? Java Basics - Anfänger-Themen 17
O Ist diese Zahl größer oder kleiner 0? Java Basics - Anfänger-Themen 6
M Gibt es eine einfachere Variante diese Aufgabenstellung zu lösen? Java Basics - Anfänger-Themen 11
hdi Brainlag: Warum fliegt diese NPE? Java Basics - Anfänger-Themen 10
J Woher kommt diese NullPointerException? Java Basics - Anfänger-Themen 6
D Wie wird diese Verzweigung genannt? Java Basics - Anfänger-Themen 6
H Klassen zur Anzeige ines Bildes und zum Zeichnen innerhalb diese Bildes Java Basics - Anfänger-Themen 2
N Wer kann diese Zeile erklären? Java Basics - Anfänger-Themen 9
T Warum muss diese Variable final deklariert werden? Java Basics - Anfänger-Themen 5
W Bindung bzw warum wird diese Methode aufgerufen? Java Basics - Anfänger-Themen 5
P [Positiv Erledigt] Ordner mit Bildern auslesen und diese speichern Java Basics - Anfänger-Themen 7
I Was macht diese Funktion? Java Basics - Anfänger-Themen 4
K Warum funktioniert diese Methode nicht? Java Basics - Anfänger-Themen 20
S Ich verstehe diese Methode nicht! Java Basics - Anfänger-Themen 6
G while (true) ? wodurch wird diese Schleife beendet? Java Basics - Anfänger-Themen 6
G Threads prüfen, ob diese noch laufen. Java Basics - Anfänger-Themen 3
G Class Getopts <-- Wie kann ich diese Class importieren Java Basics - Anfänger-Themen 1
G was bedeuted diese sachen wie <E> und so? Java Basics - Anfänger-Themen 2
S Warum bekomme ich diese Exception ? Java Basics - Anfänger-Themen 3
C Wie kann ich diese Methode aufrufen? Java Basics - Anfänger-Themen 2
M Warum wird diese Methode ausgeführt? Java Basics - Anfänger-Themen 2
M wie kann man diese Funktion besser machen ? Java Basics - Anfänger-Themen 3
S Nach Namen sortieren und diese in 3 Gruppen aufteilen Java Basics - Anfänger-Themen 16
ven000m Primzahl.class wie starte ich diese einzelne Datei? Java Basics - Anfänger-Themen 10
B wo finde ich diese Dateien? Java Basics - Anfänger-Themen 6
R Was bedeutet diese Zeile. Java Basics - Anfänger-Themen 8
S Rahmen zeichnen, wie heisst diese Componente Java Basics - Anfänger-Themen 6
A Was erzeugen diese Eingaben? Java Basics - Anfänger-Themen 2
M bewirken diese Schreibweisen das gleiche? :) Java Basics - Anfänger-Themen 8
G Was bedeutet diese Fehlermeldung von Tomcat Java Basics - Anfänger-Themen 29
M warum wird diese while schleife nicht unterbrochen Java Basics - Anfänger-Themen 12

Ähnliche Java Themen

Neue Themen


Oben