For schleife

Simonnnn

Cadet 4th Year
Registriert
Jan. 2019
Beiträge
74
Hallo, ich habe aktuell eine website an der ich arbeite. Dabei versuche ich aus einem normalen textfeld
Code:
<input type="text" id="text"></input
den text ungefähr so auslesen lasse
Code:
    var Text =document.getElementById("text").value;
und lasse so die einzelnen buchstaben auslesen
Code:
    for (var i = 0; i < text.length; i++) {
      var  currentCharacter = text[i]    }
so kann ich mir jetzt bestimmte stellen auslesen lassen. Mein problem ist das ich nun z.B auslesen lassen will an welcher stelle der erste punkt oder das erste Fragezeichen ist.Ich hwüsste wie ich das mit variablen lösen könnte meine Frage ist, ob ich das auch mit einer For schleife lösen kann das ich mir z.B so das erste Satzzeichen auslesen kann:
Code:
console.log(rechenzeichen[0])

Danke jetzt schonmal
 
Hi,

verstehe ich nicht so ganz. Du kannst in deiner for doch einfach prüfen, ob das aktuelle Element ein Zeichen ist, das du suchst (vergleichen) und dann ausgeben - oder verstehe ich die Frage falsch?

Und: warum genau muss es mit Schleife sein? Warum nicht eine bestehende Funktion verwenden?

VG,
Mad
 
So mache ich das aktuell auch aber in meinem Fall kann man es zwar machen macht aber später nur noch probleme weil es einfach zu viele stellen sind und ich mit einer schleife viel besser arbeiten könnte.
Aktuell vergleiche ich einfach wo der erste punkt oder das erste satzzeichen ist, so lasse ich mir die stelle ausgeben und die kleinste dieser stellen ist dann das erste zeichen, dass geht aber ab einem bestimmten punkt einfach nicht mehr weil es einfach zu komplieziert und zu viel code ist.

VG,
Simon
 
Hi,

verstehe dein Anliegen immer noch nicht. Hast du das "Problem" denn jetzt gelöst oder nicht? Der Satz oben klingt nach "ja" - aber was möchtest du dann denn jetzt?

VG,
Mad
 
  • Gefällt mir
Reaktionen: abcddcba
Richtig verständlich ist dein Problem immer noch nicht. Liefer doch mal mehr Code, vielleicht ist dein Anliegen dann ein bisschen klarer.
 
ihr seid imerhin schon weiter als ich - ich hänge noch an der Eingangsfrage:

Ich fasse mal meinen Stand zusammen:
Er will die Stelle im Text an der ein bestimmtes Zeichen zuerst auftritt
Simonnnn schrieb:
will an welcher stelle der erste punkt oder das erste Fragezeichen ist
Gut, die erste Idee aller hier, wir alle würden indexOf Funktion nehmen, die macht nämlich genau das und zwar so effizient wie halt möglich.

Dann sagt er
Simonnnn schrieb:
.Ich hwüsste wie ich das mit variablen lösen könnte
was auch immer das zu bedeuten hat. Basierend auf seinem letzten Kommentar würde ich aber jetzt behaupten, er meinte genau das damit. Schade dass er Variable vs Funktion hier verwechselt hat, oder sich zumindest kryptisch ausgedrückt hat.

Dann fragt er
Simonnnn schrieb:
meine Frage ist, ob ich das auch mit einer For schleife lösen kann das ich mir z.B so das erste Satzzeichen auslesen kann
und er zeigt auch eine For-Schleife. Was es noch merkwürdiger macht, er hat die Schleife schon, muss nur das machen was in #2 schon gesagt wurde, vergleiche das jeweilige Zeichen mit was auch immer er sucht.


Was ich vermute basierend auf seinem letzten Kommentar, er versteht entweder indexOf nicht oder er hat einen Pool von Zeichen, und macht was komisches damit und sammelt von allen die 1. Position im Text. Warum das kompliziert sein soll, keine Ahnung. Dass man eine For-Schleife nach dem ersten Treffer abbrechen kann, weiß er hoffentlich?
Entweder er iteriert über all Zeichen innerhalb der For-Schleife.
Oder, wenn man es bequem haben will, nimmt man search Funktion und gibt ein Regex an.







 
  • Gefällt mir
Reaktionen: xenon-seven
OK, da das so scheinbar nicht Funktioiert nochmal von anfang: Ich arbeite an einem Taschenrechener, bis jetzt nehme ich mir genau wie oben dargestellt denn String also mit
Code:
  var Text =document.getElementById("text").value;

   
           for (var i = 0; i < text.length; i++) {
var currentCharacter = text[i] }
Bis jetzt habe ich die einzelnen operatoren so definiert, dass ich mir mit indexOf die Stelle der operatoren geholt habe da dieser rechner ziemlich lang ist, will ich nicht noch mehr code schreiben und aus noch einpaar andere sachen würde das einfacher machen. Aus diesem grund will ch das mit irgendeiner schleife und nicht mit indexOf tuen. Und deshalb ist meine frage ob man indexOf auch durch eine schleife erssetzen kann.

Sorry für die ungenaue beschreibungen
 
Also ist dein eigentliches Ziel, die Rechenoperationen herauszufinden und dann vermutlich durchzuführen, die ein Benutzer in ein Textfeld eingegeben hat. Oder habe ich das falsch verstanden?
 
Das ist richtig.Gibt es denn da eine möglichkeit?
 
Zuletzt bearbeitet:
Das liest sich so, als würde im Textfeld bereits die durchzuführende Berechnung stehen, welche wiederum aus mehreren Operationen zusammengesetzt sein kann (also bspw. 5 * 13.4 - 24.78 / 2).

Ich stelle mal die ketzerische Frage: Warum nicht einfach eval() nehmen?
 
Weil der Rechner bei der Sache die ich machen will eval() gerade bei meinem projekt nicht funktioniert.
 
Ja, OK. Kannst Du dann vielleicht noch etwas mehr von den Bedingungen preisgeben, unter denen das Projekt funktionieren soll, damit man ein besseres Verständnis für deine Aufgabe bekommt?

Z. B. ist für mich nicht richtig ersichtlich wieso eval() nicht funktionieren sollte. Offenbar hast Du aber bereits selbst in diese Richtung gedacht und kannst daher vielleicht auch sagen warum es damit nicht funktioniert. Bestenfalls hilft das weiter, eine möglichst einfache, effiziente Lösung umzusetzen.
 
Für nichttriviale kombinierte Operationen mit unterschiedlicher Präzedenz und evtl. sogar Klammern wirst du womöglich nicht umhin kommen, den Ausdruck erst in eine Baumstruktur zu überführen und von dieser aus abzuarbeiten.
 
Wenn man einen Taschenrechner programmieren und die Auswertung des Terms selbst vornehmen will, drängt sich eine rekursive Funktion förmlich auf. Den Term auf Klammern untersuchen und deren Inhalt extrahieren und rekursiv wieder in die Auswertungs-Funktion einfügen. Das passiert solange bis keine Klammer mehr gefunden wurde. Dann prüft man auf vorhandene Multiplikation bzw Division, führt diese aus und anschließend Addition/Subtraktion, Rückgabe = Ergebnis des Teilterms. Das ribbelt sich dann wieder bis zur obersten Ebene auf und der Rest des Terms wird erneut auf Klammern geprüft, bis keine mehr da sind, dann wird der Term in der obersten Iteration berechnet und das Ergebnis ist fertig, mit Punkt-vor-Strich, inkl. Klammern.
Mit Rekursion passt der Quellcode eines banalen Taschenrechners auf einen Bildschirm ohne scrollen.


Wie auch immer, zu einer ursprünglichen Frage:

Zum einen kann man Schleifen auch abbrechen, das heißt, wenn das erst Mal ein Punkt oder Fragezeichen kommt, wird. Das passiert in den meisten Sprachen mittels break. Ohne break könnte man sich sonst einfach den Index der ersten Fundstelle merken und diese Variable innerhalb der Schleife nur dann setzen, wenn der aktuell gefundene Index kleiner ist als der gemerkte Index in der Variable.

Das könnte in etwa so aussehen:

Code:
var firstIndex = text.length;

for (var i = 0; i < text.length; i++)
{
   if (text[i] == '?')
   {
      if (i < firstIndex)
      {
         firstIndex = i;
      }
   }
}

oder eben so:

Code:
var firstIndex = text.length;

for (var i = 0; i < text.length; i++)
{
   if (text[i] == '?')
   {
      firstIndex = i;
      break;
   }
}

oder eben noch einfacher:

Code:
var firstIndex = text.indexOf('?');
 
Gerade bei anspruchsvolleren und damit komplexeren Operationen, würde ich die Logik allerdings komplett von der Darstellung trennen. Das würde heißen, nicht das Textfeld als Speicher für die Operationen nutzen und dann zu parsen, sondern das Textfeld nur mit den aktuellen Werten updaten und die Rechenoperationen und Operanden in JavaScript zu speichern (also in einem Array bspw.) - HTML/CSS dann nur für die Oberfläche und JavaScript für die Logik und das eigentliche Programm.
 
Ansich erstmal danke für die Hilfe aber wozu das break sollte die schleife nicht alle stellen ermitteln sorry für die frage aber ich habe wenig ahnung von schleifen.
 
In der Eingangsfrage wurde nach dem ersten Punkt/Fragezeichen gesucht. Wenn Du dazu zwangsläufig eine for-Schleife verwenden willst, braucht die Schleife nicht unnötigerweise bis zum letzten Index weiterlaufen, sondern kann abbrechen sobald das gesuchte Zeichen gefunden wurde. Dazu dient die break-Anweisung. Gewöhnlich würde man bei solch einer Konstellation eher eine while-Schleife verwenden, wobei bei deinem konkreten Vorhaben wohl tatsächlich eher ein alternativer Ansatz sinnvoll erscheint - wie hier bereits mehrfach vorgeschlagen.
 
Fazit: Er will einen Parser fuer Math Expression schreiben ... dass man hier die Praezedenz der Operationen beachten muss, naja wird wohl ignoriert? Oder wie wird dann a + b * c ausgewertet?

Das ganze ergibt wie schon erwaehnt einen Baum. Ohne braucht man hier gar nicht anfangen, sonst wird es nicht richtig.

Der TE hat uebrigens schon "Probleme" mit break und Schleifen, also lassen wir das algorithmische wohl besser weg. Ich moechte gerne den finalen Code dann mal sehen, die Umsetzung mit For Schleifen.
 
  • Gefällt mir
Reaktionen: BeBur
Zurück
Oben