Wie funktioniert bei der Aufgabe 2 der zweite Punkt (void addTags(int number, char tag)?

3 Antworten

Es geht definitiv ohne Umwandlung in einen String. Lösungsweg in Worten:

Angenommen deine Zahl liegt in der Variable "number". Du kannst dann mittels

number % 10

immer die letzte Ziffer vor dem Komma erhalten. Beispielsweise, bei number = 1234 würde number % 10 = 4 sein. Bei number 123.4 wäre number % 10 = 3. Und so weiter. Auf diesem Weg kannst du an jede der Ziffern kommen. Diese Ziffern kannst du in einer Liste o.Ä. ablegen. Nun gilt es nur noch, die Länge der Liste zu bestimmen, und am Anfang, Ende und in der Mitte den Char einzufügen. Am Ende baust du aus der Liste einen String und gibst diesen aus.

Damit hättest du die eigentliche Zahl 1234 nie in einen String umgewandelt.

Woher ich das weiß:Berufserfahrung – Inhaber einer App-Agentur & 15+ Jahre Programmiererfahrung

Also der Dozent der das Verfasst hat gehört geschlagen...

"Hey lasst uns doch eine total bescheuerte Aufgabe machen die so in der Art zu keinem Zeitpunkt in der realen Welt vorkommen wird" ....

Naja, hier mal mein Ansatz:

Du nutzt die Arithmetik mit Ganzzahlen aus:

zuerst brauchen wir eine rekursive Methode um uns die einzelnen Ziffern zu holen:

private static List<Integer> digits = new ArrayList<>();
public static void getDigits(int num) {
	    if(num / 10 > 0) {
	    	getDigits(num / 10);
	    }
	    digits.add(num % 10);
	}

Wenn du diese Methode aus addTags aufrufst bekommst du nun eine Liste aus einzelnen Ziffern.

Ab hier kannst du wie gewohnt vorgehen:
Die länge bestimmen und Rückgabestring bauen.

Ist jetzt nicht die schönste Lösung, aber das was mir grad auf die schnelle einfällt.

Woher ich das weiß:Berufserfahrung – Java Entwickler
Isendrak  28.11.2019, 21:24

Anstelle einer Liste kannst du aber auch ein Array verwenden. Die benötigte Anzahl an Elementen gibts mit

int nelements = Math.ceil(Math.log(number)/Math.log(10));

Wobei man auch etwas kreativ sein könnte:

int nelements = Math.ceil(Math.log(number)/Math.log(10));
char[] didgits = new char[nelements];
for(int i = nelements - 1; i >= 0; --i, number /= 10){
    digits[i] = (char)((number % 10) + 48);
}

(Und wenn man nelements einfach um 3 erhöht und die Schleife etwas anpasst, dann kann man sogar dieses Tag-Gedöns direkt mit einsetzen. Wobei, im Grunde könnte man sich bei einem passenden Schleifenaufbau auch gleich das komplette Zwischenspeichern sparen und die einzelnen Tag-Zeichen/Ziffern JIT-mäßig ausgeben. ^^)

Immerhin ist ein char-Array in Java etwas anderes als ein String. ^^

P.S.:

Also der Dozent der das Verfasst hat gehört geschlagen...

Allerdings... Optimalerweise unter Verwendung eines Ausdrucks der kompletten Java-Dokumentation auf Tonpappe. (Zzgl. Hardcover aus Buchenleimholzplatten.)

2

Es können nur Strings ausgegeben werden. Zahlen werden binär gespeichert und können demnach nicht nach Dezimalstellen getrennt werden. Ich verstehe nicht, was die wollen.

Floo201 
Fragesteller
 28.11.2019, 20:31

anscheinend muss es ohne Strings gehen nur weiß ich nicht wie...

0
PerfectMuffin  28.11.2019, 20:33
@Floo201

Ohne Strings ist 100% unmöglich. Wenn etwas ausgegeben wird, muss zu irgendeinem Zeitpunkt ein String erstellt werden. Das kann nicht sein, was die meinen, die Aufgabe ist nur sehr dumm gestellt.

0
Floo201 
Fragesteller
 28.11.2019, 20:38
@PerfectMuffin

wie würdest du den code dann schreiben? wäre sehr dankbar!

0
Eismensch  28.11.2019, 21:03
@PerfectMuffin

Die Ausdrucksweise des Dozenten hier ist ein wenig "schlecht".

Was er meint ist das du die Integer Zahl nicht einfach in einen String umwandelst und dann wie in Teilaufgabe 1 vorgehst. Ohne diese Beschränkung sind beide nämlich mehr oder minder identisch.

Alles andere würde auch keinen Sinn ergeben.

0
Functional  28.11.2019, 20:53

 Am Ende kann natürlich nur ein String ausgegeben werden, das ist aber nicht Gegenstand der Aufgabe. Die Zahl number selbst darf nur nicht in einen String gewandelt werden. Soll heißen, es dürfen keine String-Funktionen auf number angewandt werden.

0
PerfectMuffin  28.11.2019, 20:59
@Functional

i.e. Man soll die Ziffern mit bizarren Mathematischen Operationen rausholen, anstatt z.B. mit charAt() oder substring()?

0
Functional  28.11.2019, 21:00
@PerfectMuffin

So würde ich die Aufgabe verstehen, ja, siehe meine Antwort. Solang man die Zahl selbst nicht mit String-Funktionen anfasst, würde ich die Aufgabe als bestanden markieren, alles andere wäre ja nicht möglich.

0