java string aufgabe

  • Themenstarter Themenstarter Heyoka955
  • Beginndatum Beginndatum
H

Heyoka955

Gast
11609





11610


ich kmme nicht mehr weiter, kann mir einer helfen bei der aufgabe ?

Given a number, return a string with dash'-'marks before and after each odd integer, but do not begin or end the string with a dash mark
 
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.
Ich weiß aber ich komme nicht mehr weiter. Ich glaube ich muss an der if Bedingung was äbä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.
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 mache
 
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:
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());
}
 
@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:
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;
  }

Edit:
Geht natürlich auch mit Streams 😉
Java:
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());
  }
 
Zuletzt bearbeitet:
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. 🙂
 

Zurück
Oben