callidus: Fehler im Programm

Ich danke noch einmal für eure hilfe zu meiunem letzten programm, jedoch funktioniert die funktion nicht so, wie ich sie haben wollte:
Es soll eine Fallunterscheidung geben. Und zwar: je nachdem wie lang die eingegebene zahl ist, soll unterschiedliches ausgeben werde4n.
wo ist der Fehler?:
<!--
function work() {
var i=document.eingabe.zahl.value;
var z=i;
var zeichen="";
var kette="";
var k="";
var k0="";
var k1="";
var k2="";
var k3="";
var laenge="";
var ausgabe="";
e_zahl = new Array("null", "eins", "zwei", "drei", "vier", "fuenf", "sechs", "sieben", "acht", "neun", "zehn", "elf", "zwölf");
z_zahl = new Array("zehn", "zwanzig", "dreizig", "vierzig", "fünfzig", "sechszig", "siebzig", "achtzig", "neunzig");
a_zahl = new Array("hundert", "tausend", "und");
 kette=String(z);
 laenge=kette.length;
switch (laenge) {
  case "1":
    alert("Sie sind sehr bescheiden");
    break;
  case "2":
    alert("Sie sind ein aufrichtiger Zweibeiner");
    break;
  case "3":
    alert("Sie haben ein Dreirad gewonnen");
    break;
  case "4":
    alert("Gehen Sie auf allen Vieren und werden Sie bescheidener");
    break;
  default:
    alert("Sie bleiben leider dumm");
    break;
}
//document.write(ausgabe);
}
//-->

  1. Moin!

    Es soll eine Fallunterscheidung geben. Und zwar: je nachdem wie lang die eingegebene zahl ist, soll unterschiedliches ausgeben werde4n.
    wo ist der Fehler?:

    Was passiert? Was passiert nicht? Was sollte passieren? Mach mal eine ordentliche Fehlerbeschreibung, dann kann man auch besser helfen.

    Und wenn du mal deine ganzen überflüssigen Variablendefinitionen rauswerfen würdest, würde deine Funktion auch noch deutlich übersichtlicher werden.

    - Sven Rautenberg

    --
    My sssignature, my preciousssss!
  2. <!--
    function work() {
    kette=String(z);
    laenge=kette.length;
    switch (laenge) {
      case "1":
        alert("Sie sind sehr bescheiden");
        break;
      case "2":
        alert("Sie sind ein aufrichtiger Zweibeiner");
        break;
      case "3":
        alert("Sie haben ein Dreirad gewonnen");
        break;
      case "4":
        alert("Gehen Sie auf allen Vieren und werden Sie bescheidener");
        break;
      default:
        alert("Sie bleiben leider dumm");
        break;

    so, nochmal ohne variabeln und arrays.

    das problem ist, das ich auf einen definierten okaybutton klicke und dann ein popup mit "sie bleiben dumm" erscheint. obwohl er mir, wenn ich die fallunterscheidung nicht habe und die zeile : document.write(laenge); vorhanden ist schreibt: 1.
    und das kann ja wohl nicht sein, oder!?

    1. hi,

      das problem ist, das ich auf einen definierten okaybutton klicke und dann ein popup mit "sie bleiben dumm" erscheint. obwohl er mir, wenn ich die fallunterscheidung nicht habe und die zeile : document.write(laenge); vorhanden ist schreibt: 1.

      laenge=kette.length;

      Das gibt dir eine Zahl, einen Integer-Wert, zurück.

      switch (laenge) {
        case "1":

      Warum vergleichst du hier also nicht ebenfalls auf einen Integer, sondern auf einen String?

      gruß,
      wahsaga

      --
      /voodoo.css:
      #GeorgeWBush { position:absolute; bottom:-6ft; }
    2. Hallo,

      das problem ist, das ich auf einen definierten okaybutton klicke und dann ein popup mit "sie bleiben dumm" erscheint. obwohl er mir, wenn ich die fallunterscheidung nicht habe und die zeile : document.write(laenge); vorhanden ist schreibt: 1.

      das ist auch logisch und richtig.
      Sehen wir uns das mal an:

      <!--

      Den HTML-Kommentar um das Script kann man sich nun wirklich sparen, wenn man nicht unbedingt noch zehn Jahre alte Uraltbrowser bedienen möchte.

      function work() {
      kette=String(z);

      So: Wo kommt die Variable z her? Sie ist undefiniert, eigentlich müsste das Script hier schon mit einem Fehler abbrechen. Aber vielleicht ist der Browser ja so fehlertolerant (testest du etwa mit dem IE?) und nimmt die unbekannte Variable einfach mit 0 an. Dann wandelst du hier also die Zahl 0 in den String "0" um.

      laenge=kette.length;

      Okay, laenge ist jetzt 1, denn der String "0" enthält genau ein Zeichen. Das hast du ja schon herausgefunden.

      switch (laenge) {
        case "1":

      Trifft nicht zu, denn der String "1" ist nicht dasselbe wie die Zahl 1.

      case "2":
        case "3":
        case "4":

      Trifft auch alles nicht zu, ...

      default:
          alert("Sie bleiben leider dumm");

      so dass letztendlich der Ersatzzweig genommen wird.

      und das kann ja wohl nicht sein, oder!?

      Oder doch?

      So long,
       Martin

      --
      Wenn der Computer wirklich alles kann,
      dann kann er mich mal kreuzweise.
  3. ich habe die variable z als variable i deklariert. eigentlich sollte sie in einer schleife stehen, habe ich aber noch nciht eingestellt.

    so, nun die sache mit dem string:

    wie soll ich das den umändern, sodass er mir genau das richtige anzeigt?

    mit Number() habe ich schon versucht, will er auch nicht...

    1. Hi,

      ich habe die variable z als variable i deklariert. eigentlich sollte sie in einer schleife stehen, habe ich aber noch nciht eingestellt.

      das habe ich jetzt nicht ganz verstanden - aber egal, die Variable existiert also, dann läuft das Script also zurecht ohne Fehler durch.

      so, nun die sache mit dem string:
      wie soll ich das den umändern, sodass er mir genau das richtige anzeigt?

      Na, überleg doch mal: Du hast eine Zahl und willst wissen, wieviel Stellen sie hat. Also wandelst du sie in einen String und bestimmst dessen Länge. Soweit hast du's ja schon hinbekommen.
      Die Stringlänge ist natürlich wieder eine Zahl. Jetzt frage ich mich nur, warum du diese Zahl dann mit einem String vergleichst, anstatt mit einer Zahl.

      mit Number() habe ich schon versucht, will er auch nicht...

      Ja, ist doch auch Unsinn. Wenn du mit einer Zahl vergleichen willst, dann schreib doch auch einfach eine Zahl hin.

      So long,
       Martin

      --
      Mir geht es gut. Ich mag die kleinen Pillen, die sie mir dauernd geben.
      Aber warum bin ich ans Bett gefesselt?
      1. wie mache ich das denn?
        case 1:
        ??
        oder wie?

        1. wie mache ich das denn?
          case 1:
          ??
          oder wie?

          Hast du's nicht ausprobiert?  :-)
          Ist doch die einzige Notation, die in deinem Beispiel Sinn ergibt.

          Ciao,
           Martin

          --
          Das Gehirn ist schon eine tolle Sache: Es fängt ganz von allein an zu arbeiten, wenn man morgens aufsteht, und hört erst damit auf, wenn man in der Schule ankommt.
            (alte Schülererkenntnis)