Hjælp JavaScript driller!

#1| 0

Hej,

Nogen kode guruer der kan gennemskue hvorfor:

if (i % 4 == 0 || i % 4 == 1) array2 = array1[i+2];

Ikke virker, og kommer med error, når:

if (i % 4 == 0) array2 = array1[i+2];
if (i % 4 == 1) array2 = array1[i+2];

Virker?

Og når:

var t = 2;
if (t==0 || t==1) alert('0 eller 1');
else alert('ikke 0 eller 1');

Virker?

o_O

18-06-2009 20:19 #2| 0

Skal der ikke være { } i if funktioner i javascript? :/ Hvorfor ikke bare opstille to if'er, hvis det virker? Begrænset hvor meget kodevrøvl du kan få for det. :D

18-06-2009 20:21 #3| 0

if (i%4==0 || i%4==1) { array2 = array1[i+2]; }

Det jeg mente, men har ikke lige muligheden for selv at prøve.

18-06-2009 20:51 #4| 0

Det virker fint hos mig.
Hvilken browser bruger du?
Prøv evt. at smide lidt mere kode.

18-06-2009 21:22 #5| 0

Det der står i if'en er jo at: hvis i moduls 4 er 0 eller 1 så sæt array2 til at være lig med array[i+2]

du har derimod et problem hvis du kun skriver t == 0 eller t == 1 da så tal som 4,5,8,9 osv osv som virker i den første if ikke vil virke i din anden if sætning

18-06-2009 22:14 #6| 0

Det burde være ok, hvis du har prøvet både OR if sætningen og de to adskilte i samme contex

Post mere kode og skriv fejlmeddelelsen...

18-06-2009 23:05 #7| 0

Decoon: kun hvis det er flere linier der skal udføres er det nødvendigt med {} =)

Hej, jeg har fået det til at virke, det var fordi jeg havde kommenteret en senere linie ud som TILFÆLDIGVIS indeholdte det afsluttende } for en tidligere if sætning =)

Men tak for hjælpen ellers =)

if ((Math.floor(i/4) % 4) == 2) { // shift 2 places left

if (i%4 == 0 || i%4 == 1) array2 = array1[i+2];
if (i % 4 == 1) array2 = array1[i+2];
if (i % 4 == 2) array2 = array1[i-2];
// if (i % 4 == 3) array2 = array1[i-2];}

Den sidste } der havde jeg kommenteret væk da den var anbragt efter det sidste ;

Til dem der er nysgærrige (sikkert 0) er her den funktion jeg prøvede at få til at virke:

Den tager et array der altid vil være deleligt med 2 i længde, og ser det 4 elementer (tal) af gangen. De første 4 skal der ikke gøre noget ved, de næste 4 skal roteres indbyrdes 1 plads til venstre, næste 4 2 pladser til venstre, og sidste 4 3 plader til venstre. Dernæst skal den gå tilbage til 0 rotering ved næste 4 osv. osv.

function shiftrows() {

var array1 = [0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,4,5,6,7,4,5];
var array2 = [];

for (i=0; i < Math.floor(array1.length/4)*4; ++i) { // Kør denne løkke på den del
// af arrayet som er delelig med 4
if (Math.floor(i/4)%4 == 0) array2 = array1; // no shift

if (Math.floor(i/4)%4 == 1) { // shift 1 place left

if (i%4 == 3) array2 = array1[i-3];
else array2 = array1[i+1];
}

if (Math.floor(i/4)%4 == 2) { // shift 2 places left

if (i%4 == 0 || i%4 == 1) array2 = array1[i+2];
if (i%4 == 2 || i%4 == 3) array2 = array1[i-2];
}

if (Math.floor(i/4)%4 == 3) { // shift 3 places left

if (i%4 == 0) array2 = array1[i+3];
else array2 = array1[i-1];
}
}

if (array1.length - i == 2) { // håndter de evt. 2 sidste cifre

alert('2 i overskud');

if (Math.floor(i/4)%4 == 0 || Math.floor(i/4)%4 == 2) {array2 = array1; array2[i+1] = array1[i+1];}
if (Math.floor(i/4)%4 == 1 || Math.floor(i/4)%4 == 3) {array2 = array1[i+1]; array2[i+1] = array1;}
}

else alert ('else pelse, det hele gik op');

alert(i);
alert('array2 = ' + array2);

var t = 2;
if (t==0 || t==1) alert('0 eller 1');
else alert('ikke 0 eller 1');

}

18-06-2009 23:18 #8| 0
drilske if-sætninger
18-06-2009 23:21 #9| 0

Ja det =) og jeg er ikke koder, eneste jeg har kendskab til er c64 maskinkode fra de gamle c64 demo dage o_O

18-06-2009 23:28 #10| 0

Læg lige mærke til min "elegante" måde at forsikre mig om at det stykke at arrayet der køres gemmen for løkken er en længde der er delelig med 4:

Math.floor(array1.length/4)*4

= længde/4, fjern decimaler og gang igen med 4 LOL

18-06-2009 23:43 #11| 0

Smart nok, hvis du er fra C64 dagene, vil jeg da bare sige

sys64738 Over and out

19-06-2009 09:10 #12| 0

Det var tider =) startede med at kode derpå after at jeg havde fået et bånd hvor der var en maskinkode monitor der hed s-mon ex. Først senere opdagede jeg turbo assembler =)

Hader disse højniveau og object orienterede programmerings sprog.

← Gå til forumoversigtenGå til toppen ↑
Skriv et svar