Buchstaben position in einem Wort ausgeben

KleinerZwerg

Mitglied
Hallo, ich soll ein Programm schreiben, der mir die Position von einem bestimmten Buchstaben anzeigt, jedoch habe ich irgendwo einen Denkfehler..
Würde mich auf Hilfe sehr freuen..

class MZKett
{
static int [] buPos(String x, char bu)
{
int l=x.length();
char c[]=x.toCharArray();

for (int i=0; i<l ;i++ )
{
if (c (i) ==bu) {
return (i);
} // end of if
} // end of for
}


class MZKettAnw08
{
public static void main(String args[])
{
String x= "Hippopotomonstrosesquippedaliophobie";
char bu= 'o';

int Pos= MZKett.buPos(x, bu);
System.out.println(Pos);
}
}
 

KleinerZwerg

Mitglied
a) Programmieren Sie innerhalb der Java-Klasse MUKett die folgende Methode:
static int[] buPos(Stringx, char bu)
Diese Methode gibt alle Positionen zurück, an denen der Buchstabe bu innerhalb der Zeichenkette x vorkommt.
 

KleinerZwerg

Mitglied
und b) In der main()-Methode der Klasse ZKettAnw wird die Methode buPos() für die erste Komponente des Rückgabefelds der Methode einZKFeld () und einen konstanten Buchstaben aufgerufen. Alle gemäß a) ermittelten Positionen werden dann ausgegeben.

einZKFeld ist von einer anderen Aufgabe die übernommen werden soll und sieht so aus:

static String[] einZKFeld()
{
String zkf[]= {"Hallo","wie","geht","es","dir?"};
return zkf;
}
 

Robat

Top Contributor
Aha da haben wir es doch :)

Du musst deine Methode also um folgendes erweitern:

- ein int[] Array anlegen. (Max Länge ist die Länge des Wortes)
- eine Laufvariable anlegen, die mitzählt an welcher Stelle du im Array gerade bist
- anstatt return i schreibst du array[k] = i;
- am ende gibst du array zurück.

Java:
static int [] buPos(String x, char bu)
{
    int l = x.length();
    char c[]=x.toCharArray();
    int[] array = new int[l];
    int k = 0;

    for (int i=0; i<l ;i++ )
    {

        if (c[i] ==bu) {

            array[k] = i;
            k++;

        } // end of if

    } // end of for

    return array;
}

Nachteil an der ganzen Sache ist eben, das dein Array größer sein kann als die eigentliche Anzahl der Buchstaben. Dafür gibt es eigentlich Listen aber davon mal abgesehen :)
 
Zuletzt bearbeitet:

KleinerZwerg

Mitglied
Ich verstehe gerade nicht, wofür ich die Methode einZKFeld benutzen soll :S
Und es funktioniert immer noch nicht wirklich...

und wieso hast du if (c (i) ==bu) { ? wird das i nicht mit eckigen Klammern umschlossen?
 

Robat

Top Contributor
und wieso hast du if (c (i) ==bu) { ? wird das i nicht mit eckigen Klammern umschlossen?
Hatte es bereits geändert. Hab deinen Code einfach copy-pasted. Da hab ich nicht mehr dran gedacht, das da ein Fehler war :p

Mal davon abgesehen, dass die Namen der Methoden "ungünstig" gewählt sind folgendes:

Deine Methode einZKFeld() gibt dir ein Array mit Strings zurück. Von diesem Rückgabewert sollst du dir das 1. Element schnappen und, zusammen mit einem Buchstaben, der Methode buPos(String x, char bu) übergeben.
 

Viktim

Bekanntes Mitglied
So, ich hab mir auch mal schnell eine Lösung überlegt...
Java:
  public static void main(String[] args) {
    for (int i : buPos("TSEST", 'S')) { //Fuer jedes int in dem von buPos zurueckgegebenen Array
      System.out.println(i); //Gebe den Wert aus
    }
  }

  static int[] buPos(String string, char suche) {
    char[] chars = string.toCharArray();
    int zaehler = 0;

    // ermittelt die Anzahl des Buchstabens im String/ jetzt Array.
    for (int i = 0; i < chars.length; i++) {
      if (chars[i] == suche) {
        zaehler++; //Ist das gleiche zaehler = zaehler +1;
      }
    }

    int[] positionen = new int[zaehler]; //Neues Array, mit der anzahl der 
    // dient dazu, die richtige Stelle des positionen-Arrays auszuwaehlen
    int anzahlBuchstabenZaehler = 0;

    // ermittlt die Positionen und schreibt diese ins array
    for (int i = 0; i < chars.length; i++) {
      if (chars[i] == suche) {
        positionen[anzahlBuchstabenZaehler] = i;
        anzahlBuchstabenZaehler++; //muss auch hochgezaehlt werden, damit nicht alles in das gleiche Element (z.B. [0] des Arrays geschrieben wird.)
      }
    }

    return positionen;
  }
 

Neue Themen


Oben