Das nächste mal Code bitte nicht als Bilder posten.
Zu deinem Problem:
Du setzt momentan immer 2 Bindestriche - 1 vor der Zahl und einen danach. Das Problem ist, dass dadurch solche Konstrukte entstehen können: 5-3--1-1, weil du sowohl vor/nach der 3 einen Bindestrich setzt als auch vor/nach der 1.
Überdenk' deinen Algorithmus noch mal .. es gibt verschiedene Wege deinen Code abzuändern.
Das nächste mal Code bitte nicht als Bilder posten.
Zu deinem Problem:
Du setzt momentan immer 2 Bindestriche - 1 vor der Zahl und einen danach. Das Problem ist, dass dadurch solche Konstrukte entstehen können: 5-3--1-1, weil du sowohl vor/nach der 3 einen Bindestrich setzt als auch vor/nach der 1.
Überdenk' deinen Algorithmus noch mal .. es gibt verschiedene Wege deinen Code abzuändern.
Du könntest den "vorderen Strich" auch variabel gestallten. Wenn du im aktuellen Durchlauf vorne und hinten einen Strich schreibst, darfst du beim nächsten Durchlauf maximal hinten einen Strich schreiben (oder keinen, falls die Zahl gerade ist).
Wenn du im aktuellen Durchlauf nur eine Zahl geschrieben hast, darf im nächsten Durchlauf sowohl vorne, als auch hinten ein Strich folgen.
Du könntest den "vorderen Strich" auch variabel gestallten. Wenn du im aktuellen Durchlauf vorne und hinten einen Strich schreibst, darfst du beim nächsten Durchlauf maximal hinten einen Strich schreiben (oder keinen, falls die Zahl gerade ist).
Wenn du im aktuellen Durchlauf nur eine Zahl geschrieben hast, darf im nächsten Durchlauf sowohl vorne, als auch hinten ein Strich folgen.
Du könntest den "vorderen Strich" auch variabel gestallten. Wenn du im aktuellen Durchlauf vorne und hinten einen Strich schreibst, darfst du beim nächsten Durchlauf maximal hinten einen Strich schreiben (oder keinen, falls die Zahl gerade ist).
Wenn du im aktuellen Durchlauf nur eine Zahl geschrieben hast, darf im nächsten Durchlauf sowohl vorne, als auch hinten ein Strich folgen.
Wenn du den String als Liste (bzw. Stream/Strom) von Zeichen ansiehst, und jedes dieser Zeichen auf einen String "abbilden"/mappen willst, der entweder das Zeichen allein ist oder ein "-" + zeichen + "-", abhängig davon, ob du am Anfang/Ende des Strings bist oder das Zeichen eine gerade/ungerade Zahl darstellt, wird die Lösung recht elegant:
Java:
publicstaticStringdashitize(int number){String s =String.valueOf(number);return java.util.stream.IntStream.range(0, s.length()).mapToObj(i ->newObject(){boolean edge = i ==0|| i == s.length()-1;int v = s.charAt(i)-'0';boolean even = v %2==0;}).map(o -> o.even || o.edge
?String.valueOf(o.v):"-"+ o.v +"-").collect(java.util.stream.Collectors.joining());}
@httpdigest Dann hast du das selbe Problem wie bei seinem jetzigen Code. Sobald 2 ungerade Zahlen hintereinander stehen, und nicht am Anfang/Ende der Zahl sind, hast du 2 Bindestriche nebeneinander.
Java:
publicstaticStringdashitize2(int num){String str =String.valueOf(num);String preDash ="-";String result ="";for(int i =1; i < str.length()-1; i++){int x = str.charAt(i)-'0';if(x %2!=0){
result += preDash + x +"-";
preDash ="";}else{
result += x;
preDash ="-";}}char first = str.charAt(0);char last = str.charAt(str.length()-1);return first + result + last;}
Edit:
Geht natürlich auch mit Streams
Java:
publicstaticStringdashitize(int num){String s =String.valueOf(num);return java.util.stream.IntStream.range(0, s.length()).mapToObj(i ->newObject(){boolean edge = i ==0|| i == s.length()-1;int v = s.charAt(i)-'0';boolean prefDash = i >1&&(s.charAt(i-1)-'0')%2!=0;boolean even = v %2==0;}).map(o -> o.even || o.edge
?String.valueOf(o.v):(o.prefDash ?"":"-")+ o.v +"-").collect(java.util.stream.Collectors.joining());}
Oh, das hatte ich komplett übersehen. Geht aber aus der Aufgabenstellung nicht 100%ig hervor. Wenn da steht, dass vor und nach einer ungeraden Zahl (außer vor der ersten und nach der letzten) Bindestriche stehen soll, dann ist das mit den doppelten Strichen ja immer noch technisch richtig.