[Lua] Tabelle funzt net

Wir sammeln alle Infos der Bonusepisode von Pokémon Karmesin und Purpur für euch!

Zu der Infoseite von „Die Mo-Mo-Manie“
  • Hallo,


    schon wieder ein Problem mit Lua. Hab 'ne Tabelle gemacht, wo eben Werte ausgelesen werden können, wenn sie gebraucht werden können. Doch diese funzt net. Code:


    Fehlermeldung: Herstellung:10: table index expected, got nil
    Komischerweise hab ich die Tabellen immer so gemacht und sie funzten. Also alles 1 zu 1 kopiert und nur die Werte geändert. Woran liegt das?
    Ach ja! Bevor hier jemand kommt und meint, du hast die Variable Item net definiert. Doch hab ich, doch dass ist in 'nem anderen Programm, welche zu diesen hier führt gemacht worden. Und das halt nur, damit die Erkennung der Eingabe(Also ob alles richtig oder was falsches eingeben wurde)einfacher ist. Diesen Teil zeig ich halt net, weil der Teil funzt.
    Hoffe das mir jemand helfen kann, da ich den Fehler einfach net finde.

  • Jop, das sagt die Fehlermeldung doch schon. Er hat einen Index erwartet, hat aber keinen bekommen. Also enthält die Variable Lapis keinen Wert. Da solltest du besser darauf achten. Wo definierst du die Index-Variablen überhaupt? Im selben Programm oder wo anders?

  • Hab ich vergessen, weil ich erst dachte, dass er mir dann alle Items herstellt, die er kann, aber ich benutzt ja, eine andere Variable dafür, weswegen das falsch war. Hab nun alle Variablen definiert. Hab auch im Startpost noch einen weiteren Fehler gefunden, nämlich ich hab ein print vergessen, damit er überhaupt was aus der Tabelle auslesen kann. (Auch über eine Variable, die man selber definieren kann, damit auch ein Item hergestellt werden kann. Dennoch habe ich jetzt folgenedes Problem:
    Code:


    Fehlermeldung:Herstellung:63: bad argument: int expected, got boolean
    Ich sehe da aber nirgendwo ein Fehler.

  • Bevor du dich um die Fehler kümmerst, die der Compiler (oder was auch immer) bemängelt, würde ich mir erstmal Gedanken um die Fehler machen, die er nicht bemängelt.
    Wieso setzt du alle Index-Variablen auf den selben Wert? Das ist absolut bescheuert, wozu benutzt du dann überhaupt ein Array? Genau dazu ist ein Array doch da, viele Variablen, Objekte etc. vom selben Typ zu speichern, du speicherst auf diese Weise aber alles in den selben Platz im Array!!!!
    Ich weiß leider nicht genau, was die Funktion in Zeile 63 machen soll bzw. was diese erwartet, aber offensichtlich kommt da irgendwo eine Boolean-VAriable anstatt einer Int-Variablen. Wenn es beim Funktionsaufruf bereits ist, heißt das, dass er kein "false" als Parameter haben möchte, sondern eine Zahl. Da es weiter oben in Zeile 54 aber zu funktionieren scheint kann ich mir nicht vorstellen, was hier anders sein soll, sodass es nicht akzeptiert wird.

  • Da es weiter oben in Zeile 54 aber zu funktionieren scheint kann ich mir nicht vorstellen, was hier anders sein soll, sodass es nicht akzeptiert wird.


    Ich könnte mir vorstellen, dass es kein Compiler, sondern ein Interpreter ist und die Zeile 54 gar nicht ausgeführt wird. Der korrekte Parameter wäre übrigens, wie ich dem ComputerCraft-Wiki entnehme eine Farbe.

  • Kann durchaus ein Interpreter sein, aber selbst dann macht es keinen Sinn, dass bei zwei gleichen Zeilen nur die zweite bemängelt wird.
    Jop, da steht's, eine Farbe, vielleicht sind diese intern als Integer-Werte gespeichert, das würde erklären, weshalb der Compiler/Interpreter hier etwas von Int ausgibt, es erklärt aber nicht, weshalb die Zeile 54 nicht angezweifelt wird.

  • Naja, ich habe das Programm jetzt so verändert:


    Fehler:Herstellung:41: attempt to compare string with number expected, got string.
    Das was nun meine Vermutung: Er will eben Anzhal1 mit 0 vergleichen. Er braucht dafür eine Nummer diese er auch erwartet hat. Aber angeblich hat er keine Nummer bekommen. Man kann diese Variable ja selber bestimmen aber da hab ich ja die ganze Zeit ne Zahl eingeben. Was ist jetzt schon wieder falsch?

  • Auch wenn du eine zahl eingibst, wird es als string gespeichert, das hängt damit zusammen, dass io.read() wohl einen string als rückgabewert hat. Du wirst deine eingabe wohl typecasten müssen, damit das funktioniert. In den mir bekannten programmiersprachen geht das immer mit (int)anzahl1 (also für dein beispiel jetzt), wenn das nicht funktioniert, google einfach mal. Mit dem befehl konvertierst du einen string zu einem int (zwar ohne den fehler abzufangen, dass der string keine zahl ist, aber da du ja nur zahlen eingibst, ist es ja egal)
    Und noch eine anmerkung: du übergibst bei den methoden immer konstanten wie colors.gray. Sollten diese konstanten In verbindung mit den variablen stehen (also bei grau lapis), dann würde ich als parameter auch lapis angeben, so wird, wenn du oben lapis ändert, direkt alles mitgeändert und du musst nicht erst noch gucken, ob an den stellen, wo colors.gray steht, du das in die neue farbe von lapis ändern musst