H
5-3--1-1
, weil du sowohl vor/nach der 3 einen Bindestrich setzt als auch vor/nach der 1.Ich weiß aber ich komme nicht mehr weiter. Ich glaube ich muss an der if Bedingung was äbä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.
Wie meinst du variabel gestalten?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.
Die Aufgabe will dass ich bei ungeraden Zahlen den Strich macheDu 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.
public static String dashitize(int number) {
String s = String.valueOf(number);
return java.util.stream.IntStream
.range(0, s.length())
.mapToObj(i -> new Object() {
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());
}
public static String dashitize2(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;
}
public static String dashitize(int num) {
String s = String.valueOf(num);
return java.util.stream.IntStream
.range(0, s.length())
.mapToObj(i -> new Object() {
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());
}
habe die aufgabe beendet, leider nicht geschafft.Da gab ich dir recht. Wenn man sich die Tests genauer anschaut kommt man aber drauf![]()