Olli: Arrays mit char-Index möglich?

Hallo

Ich wollte gerade ein Array bilden, mit dem ich Zeichen in einem String zähle, also wieviel 'a' vorkommen. Dafür wollte ich ein Array mit dem index des Buchstabens erstellen und das dann zählen lassen. Also z.B. "buchstabe[a]++;". Irgendwie scheint das nicht zu funktionieren... Wie kann ich denn solch ein Array erstellen?
Gehst das in Java überhaupt?

Gruss OLLI

--
Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher.
Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.
[Albert Einstein]
  1. Hallo,

    Ich wollte gerade ein Array bilden, mit dem ich Zeichen in einem String zähle, also wieviel 'a' vorkommen. Dafür wollte ich ein Array mit dem index des Buchstabens erstellen und das dann zählen lassen.

    Hört sich gut an.

    Also z.B. "buchstabe[a]++;". Irgendwie scheint das nicht zu funktionieren...

    "Funktioniert nicht" ist keine Fehlerbeschreibung.

    Wie kann ich denn solch ein Array erstellen?

    int[] buchstabe = int[256];

    ;-)

    Gehst das in Java überhaupt?

    Klar. Und zwar so, wie du das beschrieben hast.

    Vielleicht solltest du ein bißchen mehr Code posten, damit wir den
    Fehler mal suchen können -- falls du ihn nicht selbst findest.

    Gruß
    Slyh

    1. Hört sich gut an.

      Find ich auch ;)

      "Funktioniert nicht" ist keine Fehlerbeschreibung.

      Stimme ich zu...

      Wie kann ich denn solch ein Array erstellen?

      int[] buchstabe = int[256];

      Vielleicht irre ich mich, aber wo hab ich da mein 'a', 'b', 'c'...???

      Gehst das in Java überhaupt?

      Klar. Und zwar so, wie du das beschrieben hast.

      Ok, das Hochzählen geht somit. Mir ging es mehr um die initialisierung der Variablen mit den char-Indizes. Also wenn das beim Ersten Posting nicht so rüberkam, hier nochmal:

      Wie initialisiere ich eine Array-Variable, die in ihrem Index nicht die Zahl 1 bis x hat, sondern die Buchstaben 'a' bis 'z'? So dass ich nachher das Array über "buchstabe[a] = ... " ansprechen kann?

      Vielleicht solltest du ein bißchen mehr Code posten, damit wir den
      Fehler mal suchen können -- falls du ihn nicht selbst findest.

      Ich hab keinen Code (oder nur irrelevanten) solange ich nicht weiß, wie ich das Array erstelle...

      Gruss OLLI

      --
      Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher.
      Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.
      [Albert Einstein]
      1. int[] buchstabe = int[256];
        Vielleicht irre ich mich, aber wo hab ich da mein 'a', 'b', 'c'...???

        Ein char ist ein unsigned 16-Bit integer, wenn ich mich nicht irre.

        Wie initialisiere ich eine Array-Variable, die in ihrem Index nicht die Zahl 1 bis x hat, sondern die Buchstaben 'a' bis 'z'? So dass ich nachher das Array über "buchstabe[a] = ... " ansprechen kann?

        a ist kein char. 'a' ist ein char. Oder habe ich was flacsh verstanden?

        1. Ein char ist ein unsigned 16-Bit integer, wenn ich mich nicht irre.

          Das heißt, ich soll eingeben: "blabla[1001010010101101] = ...". Dadurch habe ich irgendwie nicht das erreicht, was ich wollte, oder?
          Mnemomik: Man vereinfacht den Code durch ersetzen des "Basic"-Codes, den der Prozessor nur erkennen kann, durch andere Ausdrucksweisen. Dadurch ist man viel besser in der Lage, einen Code zu produzieren, zu warten und zu verstehen. _Bsp_:
          "010100110100010101000101000101000" ist schwerer als "MOV DX,AX". Das wiederrum wäre schwerer als "variable = 5". Was wiederrum ein Compiler in der entgegengesetzten Richtung macht: "variable = 5" --> "010100110100010101000101000101000".

          Also danke für den Beweis deines Wissens, aber mal davon abgesehen, dass das wohl jeder weiß, der halbwegs ernsthaft programmiert, bringt mich das nicht weiter... Oder sollte ich mich irren??

          a ist kein char. 'a' ist ein char. Oder habe ich was flacsh verstanden?

          Abstrakted Denken ist im Informatikbereich wichtig. Oder hab ich da was falsch verstanden?
          Gruss OLLI

          --
          Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher.
          Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.
          [Albert Einstein]
          1. Das heißt, ich soll eingeben: "blabla[1001010010101101] = ...".

            Das heißt, Du sollst eingeben: "blabla['a']", was durch implizites Casting zu "blabla[65]" wird. Binär - so wie dargestellt - kommst Du da eh nicht ran, weil's so eine Oktalzahl ist. Eine große Oktalzahl.

            "010100110100010101000101000101000" ist schwerer als "MOV DX,AX".

            Ob Dir Assembler weiterhilft?

            Also danke für den Beweis deines Wissens, aber mal davon abgesehen, dass das wohl jeder weiß, der halbwegs ernsthaft programmiert, bringt mich das nicht weiter... Oder sollte ich mich irren??

            Du irrst Dich, und zur Info: ich programmiere nicht.

            a ist kein char. 'a' ist ein char. Oder habe ich was flacsh verstanden?
            Abstrakted Denken ist im Informatikbereich wichtig. Oder hab ich da was falsch verstanden?

            Hättest Du gesagt, daß Du ein assoziatives Array suchst, hätte man Dir direkt gesagt, daß Du in den Collection-Klassen gucken sollst. Hättest Du Slyh's Hinweis befolgt und mal nach Hash* in der API geguckt, wärst Du auch schon weiter...

            Abstraktes Denken ist im Wissenschaftlichen Bereich der Informatik wichtig (sonst gäbe es zum Beispiel keine Modellierung von UML). Wenn man etwas wissen möchte (vor allem, ob was falsch ist), ist konkrete Aussprache notwendig.

            1. Hallo,

              Das heißt, ich soll eingeben: "blabla[1001010010101101] = ...".
              Binär - so wie dargestellt - kommst Du da eh nicht ran, weil's so eine Oktalzahl ist. Eine große Oktalzahl.

              Nö, ist eine normale Dezimalzahl...

              "010100110100010101000101000101000" ist schwerer als "MOV DX,AX".

              ...das wäre eine Oktalzahl. :-)

              Ob Dir Assembler weiterhilft?

              Ich glaube, er wollte nur ein wenig angeben. :-)

              Hättest Du gesagt, daß Du ein assoziatives Array suchst, hätte man Dir direkt gesagt, daß Du in den Collection-Klassen gucken sollst.

              Er sucht eigentlich gar ein assoziatives Array. Er sucht vielmehr
              ein Array, bei dem der Index bei einem Wert != 0 starten kann.
              Ungefähr so:
              int[] i = new int[10..20];

              Gültige Werte für den Index lägen damit zwischen 10 und 20.

              (Man könnte sich natürlich eine eigene Klasse AreaArray basteln, die
              den Bereich auf ein normales Array abbildet. Aber mal ehrlich: Wer
              braucht sowas? Ich habe das nie vermisst. Sogar als ich noch Pascal
              programmiert habe, habe ich äußerst selten mal ein Array nicht bei 0,
              sondern bei 1 starten lassen. Und das auch nur solange, bis es mir
              zu blöd wurde, immer zwischen Start bei 1 und Start bei 0 umrechnen
              zu müssen.)

              Hättest Du Slyh's Hinweis befolgt und mal nach Hash* in der API geguckt, wärst Du auch schon weiter...

              Da er das nicht wissen wollte, war mein diesbezüglicher Hinweis eh
              falsch.

              Abstraktes Denken ist im Wissenschaftlichen Bereich der Informatik wichtig (sonst gäbe es zum Beispiel keine Modellierung von UML). Wenn man etwas wissen möchte (vor allem, ob was falsch ist), ist konkrete Aussprache notwendig.

              Full ACK.

              Gruß
              Slyh

              1. Das heißt, ich soll eingeben: "blabla[1001010010101101] = ...".
                Binär - so wie dargestellt - kommst Du da eh nicht ran, weil's so eine Oktalzahl ist. Eine große Oktalzahl.

                Nö, ist eine normale Dezimalzahl...

                <ein loch, gebt mir ein loch>In der Tat</ein loch, gebt mir ein loch>. *augenreib*

                Er sucht eigentlich gar ein assoziatives Array. Er sucht vielmehr
                ein Array, bei dem der Index bei einem Wert != 0 starten kann.
                Ungefähr so:
                int[] i = new int[10..20];

                *pling*

      2. Hallo,

        Wie initialisiere ich eine Array-Variable, die in ihrem Index nicht die Zahl 1 bis x hat, sondern die Buchstaben 'a' bis 'z'? So dass ich nachher das Array über "buchstabe[a] = ... " ansprechen kann?

        Achso, verstehe.
        Du mußt wissen, daß ein "char" auch nur eine Zahl ist. Da es eine
        Zahl ist, kannst du es als Index für ein Array nehmen. Hier ein
        wenig Java-Code (ungetestet):

        String myString = "Hier stehen wild Buchstaben, die gezählt werden wollen.";
        int[] countCharacter = int[256];
        for (int i = 0; i < myString.length; i++) {
            countCharacter[myString.charAt(i)]++;
        }

        Sollte so schon gehen.
        Geht natürlich nur mit den ersten 256 Zeichen der Unicode-Zeichentabelle.
        Wenn du wirklich Unicode verwenden willst, muß das Zähl-Array (sehr)
        viel größer sein.
        (Natürlich könntest du auch eine HashMap nehmen, mit einem Character-
        Objekt als Key und einem Integer-Objekt als Value. Aber das wäre in
        deinem Fall -- ohne ihn jetzt genau zu kennen -- wohl etwas übertrieben.)

        Gruß
        Slyh

        1. (Natürlich könntest du auch eine HashMap nehmen, mit einem Character-
          Objekt als Key und einem Integer-Objekt als Value. Aber das wäre in
          deinem Fall -- ohne ihn jetzt genau zu kennen -- wohl etwas übertrieben.)

          Aus diversen Gründen sicherlich die bessere Wahl.

          1. Sagt mal Jungs und Mädels, drück ich mich so unverständlich aus??

            In diversen anderen Programmiersprachen kann ich _in etwa_ folgendes angeben:
            array variable[1 to 10] / [1..10] / [1,2,3,4,5] ...
            bzw.
            array variable['a' to 'z'] / ['a'..'z'] / ['a','b','c','d',...]

            Genau sowas möchte ich in Java machen, aber das klappt auf diese Art anscheinend nicht.

            Gruss OLLI

            --
            Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher.
            Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.
            [Albert Einstein]
            1. Hallo,

              Sagt mal Jungs und Mädels, drück ich mich so unverständlich aus??

              Anscheinend.

              In diversen anderen Programmiersprachen kann ich _in etwa_ folgendes angeben:
              array variable[1 to 10] / [1..10] / [1,2,3,4,5] ...
              bzw.
              array variable['a' to 'z'] / ['a'..'z'] / ['a','b','c','d',...]

              Genau sowas möchte ich in Java machen, aber das klappt auf diese Art anscheinend nicht.

              Das geht nicht.

              Gruß
              Slyh

              1. In diversen anderen Programmiersprachen kann ich _in etwa_ folgendes angeben:
                array variable[1 to 10] / [1..10] / [1,2,3,4,5] ...
                bzw.
                array variable['a' to 'z'] / ['a'..'z'] / ['a','b','c','d',...]

                Genau sowas möchte ich in Java machen, aber das klappt auf diese Art anscheinend nicht.

                Das geht nicht.

                Das ist aber ein kleines Manko von Java find ich... Schade. Sehr schade!

                Gruss OLLI

                --
                Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher.
                Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.
                [Albert Einstein]