Avatar billede spacecowgrrrl Nybegynder
12. september 2002 - 13:56 Der er 7 kommentarer og
2 løsninger

Splice eller logik problemer

Pröver at finna ud af mit förste javascript.

Det er et lille program för at stille spörgsmål og få points, med enten er logiken fel
eller så er det splice som driller.

Jag vill altså gerne at den tar vek spörgsmålet hvis det er rigtig.

Jeg ville vare taknemmlig hvis nogen gad se på koden. Malmöitiske hilsen/Camilla.

Kod-// er desvärre på svensk

<html>
<head>
<title>MittFörhör. Ställer alla frågor i slumpvis ordning</title>
<script language="JavaScript">
<!-- Här börjar skriptet

// Skapar frågor och svar & sätter minaPoints till heltalet 0

var minaFragor = new Array ("Vad betyder den retoriska termen: Docere ?", "Vad betyder den retoriska termen: Movere ?", "Vad betyder den retoriska termen: Delectare ?", "Vad betyder den retoriska termen: Natura ?", "Vad betyder den retoriska termen: Ars ?", "Vad betyder den retoriska termen: Usus ?" );
  var minaSvar = new Array ("Informera", "Engagera", "Underhålla", "Medfödda anlag för retorik", "Teorin", "Praktisk erfarenhet"); 
  var minaPoints = 0.0;

// Här slutar skriptet  -->

</Script>
</head>
<body>
<script>

//  (Ok. Först definierar jag antaletFrågor som vid start är 6 st.)
//  Antalet gånger skriptet skall köras
//  så länge a dvs. antalet frågor är mindre än 0. Så...hmm

var antaletFragor = minaFragor.length;
for (a = antaletFragor;a>0;a--){

// Ta fram antalfrågor och visar 

  antaletFragor = minaFragor.length;
  alert("Antalet frågor är "+ antaletFragor);
 
// Tar fram ett slumvis utvald nr av antalet frågor
// samt visar slumpnummret

  var slumpNummer=Math.floor(Math.random()*antaletFragor)
  alert("Slumpfrågan är nr: "+ slumpNummer);

// Frågar den utvalda frågan och definierar 

  var rattFraga = minaFragor[slumpNummer];
  var svar = prompt(rattFraga);
 
  if (svar == minaSvar[slumpNummer]){

            minaPoints += 1;       
            minaFragor.splice(slumpNummer,0);
            minaSvar.splice(slumpNummer,0);
            alert("Rätt svar ! Nu har du" + minaPoints + "/6");
  }else{
            alert("Fel svar.");
  }
}
</script>
<script>

//  Skriver ut - i dokumentfönstret.

document.write("Du har " + minaPoints + " poäng.");
</script>

<script>
document.write("Frågor kvar: " + antaletFragor);
</script>

</body>
</html>
Avatar billede Slettet bruger
12. september 2002 - 16:35 #1
Først og fremmest skal du nok lige kigge nærmere på splice-metoden:
http://www.devguru.com/Technologies/ecmascript/quickref/Splice.html
Avatar billede Slettet bruger
12. september 2002 - 16:47 #2
IE5 ser faktisk slet ikke ud til at kende splice-metoden!
Men du kan bare ændre dette:

minaPoints += 1;
minaFragor.splice(slumpNummer,0);
minaSvar.splice(slumpNummer,0);

... til dette:

minaPoints++;
minaFragor = null;
minaSvar = null;
for (i = 0; i < antaletFragor; i++) {
if (i == slumpNummer)
continue;
minaFragor[i] = (i < slumpNummer) ? minaFragor[i] : minaFragor[i - 1];
minaSvar[i] = (i < slumpNummer) ? minaSvar[i] : minaSvar[i - 1];
}
Avatar billede o-zone Nybegynder
13. september 2002 - 07:32 #3
Min explorer kender splice, men du skal bare skrive:
minaFragor.splice(slumpNummer,1);
minaSvar.splice(slumpNummer,1);

da du (vist) gerne vil have slettet det spørgsmål der lige er svaret rigtigt på? Når du skriver 0 bliver der ikke slettet noget!
Hvis du også gerne vil have slettet spørgsmål der er svaret forkert på, skal du bare tilføje de to splice linier i blokken med
alert("Fel svar.");

I øvrigt er det ret svært at svare på et spørgsmål præcis som du har svaret (med caseSensitive, og samme ordvalg).
Det var måske en ide at nøjes med at søge efter keywords i svaret.

Det kunne være noget i retning af:

if ((svar.length>0)&&(svar.toUpperCase().indexOf(minaSvar[slumpNummer])!=-1)){
i stedet for
if (svar == minaSvar[slumpNummer]){

og så kun have et enkelt essentielt ord med i svaret (skrevet UPPERCASE)

=)
Avatar billede o-zone Nybegynder
13. september 2002 - 07:36 #4
phoenixv>> det duer ikke at du sætter svar og spørgsmål til null inden du blæser gennem den løkke ... ellers ser den fornuftig ud! :)
Avatar billede o-zone Nybegynder
13. september 2002 - 07:58 #5
hold da op ... jeg ser jo lige at der er 200 point på højkant. Så må jeg da hellere skrive helt ud hvad jeg mener (lidt point-luder er der vel i os alle?) ;)
---8<---------------
<html>
<head>
<title>MittFörhör. Ställer alla frågor i slumpvis ordning</title>
<script language="JavaScript">
<!-- Här börjar skriptet

// Skapar frågor och svar & sätter minaPoints till heltalet 0

var minaFragor = new Array ("Hvilket dyr har verdens længste hals?", "Hvad spiser tegneseriemus helst?", "Hvad årstal døde JFK?", "Hvem skrev 'Alice i eventyrland'?", "Hvad hedder Bin Laden til fornavn?", "Hvilket europæisk land har et rødt flag med et sort dyr i midten?" );
var minaSvar = new Array ("GIRAF", "OST", "63", "CARROLL", "OSAMA", "ALBANIEN");
var minaPoints = 0.0;

// Här slutar skriptet -->

</Script>
</head>
<body>
<script>

// (Ok. Först definierar jag antaletFrågor som vid start är 6 st.)
// Antalet gånger skriptet skall köras
// så länge a dvs. antalet frågor är mindre än 0. Så...hmm

var antaletFragor = minaFragor.length;
for (a = antaletFragor;a>0;a--){

// Ta fram antalfrågor och visar

antaletFragor = minaFragor.length;
// alert("Antalet frågor är "+ antaletFragor);

// Tar fram ett slumvis utvald nr av antalet frågor
// samt visar slumpnummret

var slumpNummer=Math.floor(Math.random()*antaletFragor)
// alert("Slumpfrågan är nr: "+ slumpNummer);

// Frågar den utvalda frågan och definierar

var rattFraga = minaFragor[slumpNummer];
var svar = prompt(rattFraga);

if ((svar.length>0)&&(svar.toUpperCase().indexOf(minaSvar[slumpNummer])!=-1)){

      minaPoints += 1;   
      minaFragor.splice(slumpNummer,1);
      minaSvar.splice(slumpNummer,1);
      alert("Rätt svar ! Nu har du" + minaPoints + "/6");
}else{
      alert("Fel svar.");
}
}
</script>
<script>

// Skriver ut - i dokumentfönstret.

document.write("Du fik " + minaPoints + " poäng.");
</script>

<script>
//document.write("Frågor kvar: " + antaletFragor);
</script>

</body>
</html>
---8<---------------

med ovenstående program vil alle nedenstående svar på dyret med verdens længste hals f.eks. blive godkendt:
"giraf"
"Giraf"
"Giraffen"
"Giraffen har verdens længste hals"
"Det har den kenyanske giraf"
o.s.v.
og det kan både være "Carroll", "Lewis Carroll" og "Sir Lewis Carroll" der har skrevet 'alice i eventyrland'
(til gengæld tester "Arne Carroll" falsk positiv, mens "Lewis Caroll" tester negativ ... men det kræver lidt mere at slippe udenom!)

Håber at du kan bruge det!
=)
Avatar billede Slettet bruger
13. september 2002 - 15:05 #6
Ja, jeg skulle have sagt:

minaFragor = new Array();
minaSvar = new Array();

... istedet.

o-zone>> Det er da vist ikke særligt smart at teste med indexOf.
Prøv fx at tage et spørgsmål som:
"Hvilken ugedag er det i dag?"
Hvis vi nu antager, at det er den trettende, så vil svaret "1" eller "3" også blive godkendt!
Men det er en god idé at konvertere til lowercase.
Avatar billede spacecowgrrrl Nybegynder
16. september 2002 - 15:58 #7
Fedt ! 1 ikke 0.
Neaste ting jeg skulle igang med er ju at casefixa med der var du kvik
o-zone. Mange tak også för at jeg nu har lidt variation i mine spörgsmål *smiler*
Du får pointsen nesten hela pointsen ! Ok
Til phoenixv, li den link jeg har brug för !
Avatar billede Slettet bruger
16. september 2002 - 16:02 #8
Du har vist givet points til den forkerte.

o-zone>> Hent dine 190 point her:
http://www.eksperten.dk/spm/258564
Avatar billede spacecowgrrrl Nybegynder
16. september 2002 - 16:06 #9
Hmmm...undskyld er visst ikke helt fix idag *hmm*
190 til o-zone
10 til phoenixv

tak,phoenixv...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester