Buchstaben zwischen zwei Indizes entfernen

Diskutiere Buchstaben zwischen zwei Indizes entfernen im Hausaufgaben Bereich.
Kirby_Sike

Kirby_Sike

Also wir haben die Aufgaben eine Methode zu schreiben die aus einem String alle Buchstaben entfernt die zwischen den eingelesenen Indizes liegen, die Frage die ich mir Stelle ist, wie setze ich das um, ich habe eine Methode geschrieben die es schafft einen Buchstaben an einem bestimmten Index zu löschen:

Java:
String result = "";
        for (int i = 0; i <s.length(); i++)
          {
            if(s.charAt(i) == s.charAt(a)) {
                continue;
            }else {
                result += s.charAt(i);
            }
           
          }
        return result;
 
J

JustNobody

Also als erstes zu Deinem Code: Du löschst nicht einen Buchstaben an einem bestimmten Index sondern du löscht alle Buchstaben, die dem entsprechen, der an einem bestimmten index steht.

Teste es einfach einmal mit "aaaaaabcdefgaaaaa" und a soll dann mal 0 sein. Also Buchstabe an index 0 soll gelöscht werden....

Daher zwei Fragen:
a) was müsstest Du denn prüfen, damit nur der Buchstabe an einem bestimmten Index gelöscht wird? Sag es erst einmal in Worten und dann die Transformation in Code.

b) Ausgehend von a): Was müsstest Du denn prüfen, wenn du nun die zwei Grenzen bekommst und dazwischen alles gelöscht werden soll?
 
Kirby_Sike

Kirby_Sike

a) Wenn der Buchstabe beim String s anstelle i Zwischen Index bla und Index Bla liegt, ignorieren, ansonsten füge die Buchstaben zu Result hinzu
b) naja ob der Buchstabe beim String s halt an stelle i zwischen den beiden Indizes liegt, nur wüsste ich nicht wie da die Bedingung aussehen könnte
 
J

JustNobody

Bei a ging es mir um den bestehenden code, aber ok - du bist zwischen den indizes. Das ist ok.

Interessiert dich denn der Buchstabe? Musst Du den Buchstaben mit irgendwas vergleichen? Oder was musst Du vergleichen? Was ist dieses "i"? (Nimm immer aussagekräftige Namen! das erleichtert es dir evtl. auch!)
 
Kirby_Sike

Kirby_Sike

Naja also der Buchstabe perse interessiert jetzt nicht, da es ja um den Index im String geht, i ist ja die Laufvariable der For schleife und ich müsste ja den Buchstaben aus dem String an der i-ten zwischen den beiden Indizes liegt also beispielsweise ob Index 5 zwischen 4 und 6 liegt und wenn ja ignorieren oder?
 
Kirby_Sike

Kirby_Sike

Also etwa so oder?:

Code:
if (s.charAt(i) >= Index1 && s.charAt(i) <= Index2) {

ignore Stuff

}
 
J

JustNobody

Ja genau. Das hört sich gut an.
i ist somit der index des Buchstabens, der gerade betrachtet wird. Daher würde ich ihn auch index nennen oder - ich neige auch zu längeren Namen - currentIndex.
Jetzt wäre also die Frage: Wenn du untereGrenze und obereGrenze hast: Wie prüfst Du, ob currentIndex in dem Bereich ist?

Und bezüglich "Naja also der Buchstabe perse interessiert jetzt nicht," - was macht denn charAt? Wenn der Buchstabe nicht interessiert: Ist diese Methode für uns für den Vergleich wichtig?
 
Kirby_Sike

Kirby_Sike

Oh stimmt daran hab ich garnicht gedacht xD ich überlege mal eben :)
 
Kirby_Sike

Kirby_Sike

Also wenn meine Lösung stimmt, dann bin ich mal wieder an dem simpelsten Problem gescheitert, weil ich zu komplex gedacht habe :rolleyes:

Code:
if(a < index && index < b){
skip that shit
}
 
J

JustNobody

Ja, so sieht es sehr gut aus. Evtl. die < durch <= ersetzen, je nachdem, ob die Grenzen auch ignoriert werden sollen oder nicht. Oder eben umdrehen: Also if (index < a || index > b) copycharacter.

Und um den Bogen zurück zu Deinem ersten Code zu bringen. Wenn nur ein Zeichen an einer Stelle nicht kopiert werden soll, dann wäre das eben auch ohne diese charAt Aufrufe:
Java:
String result = "";
for (int i = 0; i <s.length(); i++) {
  if(i == a) {
    continue;
  } else {
    result += s.charAt(i);
  }
}
return result;
Und hier kann man das if/else auch vereinfachen indem man die Prüfung umdreht:

Java:
String result = "";
for (int i = 0; i <s.length(); i++) {
  if(i != a) {
    result += s.charAt(i);
  }
}
return result;
 
Kirby_Sike

Kirby_Sike

Ich hätte noch ne Frage, hat zwar nichts wirklich heir mit dem Thread zu tun, aber irgendwie mache ich irgendwas Falsch, ich möchte gerne in einem Array den Vorgänger + die Zahl + den Nachfolger addieren und an der Stelle der Zahl wieder ins Array speichern. Um das zu tun habe ich folgende Operation gemacht, jedoch bekomme ich ein komisches Ergebnis heraus.

Java:
Unser Array: arr = {21,32,73,147}

arr[i] = (arr[i-1]+arr[i]+arr[i+1])/3;

Die Ausgabe die ich erwarte: 21.0 42.0 84.0 147.0
Die Ausgabe die ich bekomme: 21.0, 42.0, 87.33333333333333, 147.0
 
J

JustNobody

In dem Code teilst Du noch durch 3. Ich vermute einmal, dass Du dies schlicht vergessen hast, anzugeben.

Ansonsten ist die Berechnung korrekt für ein einzelnes Feld. Aber du stößt auf ein Problem:
Du hast 21, 32, 73, 147
Nun berechnest Du das für die zweite Zahl und hast 21, 42, 73, 147
Wenn Du nun für die 3. Zahl rechnest, dann ist die zweite Zahl schon 42 und nicht mehr 32.
Daher ist die neue Rechnung statt (32+73+147)/3 = 84 eben (42 + 73 + 147) / 3 = 87,3333333

Daher ist bei so Berechnungen aus meiner Sicht immer günstig, die Eingabe unverändert zu lassen. Das kann man z.B. durch clonen des Arrays erreichen:
Java:
double result[] = arr.clone(); // arr ist nicht gegeben, ist es double? Sonst ggf. anpassen.
for (int i=1; i<arr.length-1; i++) result[i] = (arr[i-1]+arr[i]+arr[i+1])/3;
return result;
(Im Browser geschrieben, daher evtl. Tippfehler vorhanden ... aber die Idee wird hoffentlich deutlich!)
 
Kirby_Sike

Kirby_Sike

Ah ich glaube du hast mir gerade nen echt guten Tipp gegeben, ich dummkopf speichere die Werte ja wieder im Selben Array und wundere mich über die Ausgabe :) oh man ist mir gerade erst aufgefallen xD Dankeee :)
 
Kirby_Sike

Kirby_Sike

Ja gut irgendwie hab ich dass Gefühl entweder ich bin blind xD alle Test sind korrekt außer beim letzten. Er verrechnet sich beim Index 1.

Die Erwartete Ausgabe: 1.0, 1.5, 2.0, 2.0, 1.0
Die ausgegebene Ausgabe: 1.0, 1.0, 2.0, 2.0, 1.0

Mein Code:

Java:
double [] result = new double[arr.length];
        for(int i = 0; i < arr.length; i++) {
            if(arr[i] == arr[0] || arr[i] == arr[arr.length-1]) {
                result[i] += arr[i];
                continue;
            }
                result[i] = (arr[i-1]+arr[i]+arr[i+1])/3;
        }
        return result;
 
J

JustNobody

Erläutere mir doch bitte einmal, was Du mit if(arr[i] == arr[0] || arr[i] == arr[arr.length-1]) prüfen willst....
(Tipp: Da ist der Fehler zu finden!)

Und was bitte willst Du mit result[i] += arr[i]; genau machen? (Es funktioniert, aber erläutere mir mal, was er da macht incl. Info: Was ist vorher in der Variable und was ist nachher in der Variable ...)

Edit: Du hast mit nicht geschrieben, was die Eingabe ist, aber ich bin sicher, dass bei Index 1 die Zahl 1.0 zu finden ist bei dem Test :)
 
J

JustNobody

Würdest Du Deine Lösung einmal zeigen? Würde mich interessieren, wie du es gelöst hast ...
 
Kirby_Sike

Kirby_Sike

Ok hier Bitteschön:
Java:
public class Glaettung {

    public static double [] glaette(double [] arr) {
        double [] result = new double[arr.length];
        for(int i = 0; i < arr.length; i++) {
            if(i == 0 || i == arr.length-1) {
                result[i] += arr[i];
                continue;
            }
            result[i] = (arr[i-1]+arr[i]+arr[i+1])/3;
            
        }
        return result;
    }
    public static void main(String[] args) {
        double [] inputArray = {1, 1, 2.5, 2.5, 1};
        double [] result = glaette(inputArray);
        for(int i=0; i < result.length; i++) {
            System.out.print(result[i] + " ");
        }
    }
}
 
Thema: 

Buchstaben zwischen zwei Indizes entfernen

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben