Spørgsmål til algoritme

Tags:    java

import acm.graphics.*;
import acm.program.*;

public class Checkerboard extends GraphicsProgram {


public void run() {

int row = 1;
int col = 1;
int y,x;

for ( row = 0; row < 8; row++ ) {
for ( col = 0; col < 8; col++) {
y = col * 20;
x = row * 20;
add(new GRect(y, x, 20, 20));
}

}

}

}

Programmets funktion: Danner et gitter.

Spørgsmål: Jeg kan ikke se logikken i at jeg både kan definere "row" og "col" som værdien 1, og jeg i for loopet kan definere det til 0. Jeg kan ikke forstå hvordan det kan lade sig gøre at give den samme variabel 2 forskellige værdier. Kan nogen svare på hvordan det kan lade sig gøre? Håber i forstår mit spørgsmål..



5 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 2 karma
Sorter efter stemmer Sorter efter dato
Hej,

godt observeret. Det skal du heller ikke..

Du kan enten sige
int row, col;

eller bare først deklarere dem i dit for-loop sådan her:

for(int row = 0; row<8; row++)



Hej,

godt observeret. Det skal du heller ikke..

Du kan enten sige
int row, col;

eller bare først deklarere dem i dit for-loop sådan her:

for(int row = 0; row<8; row++)


Længe siden Mads, hvad går du rundt og laver?

On topic: Det kan han jo sådan set godt ;). Det du gør er at overskrive værdien nede i løkken.


int row = 1;
int col = 1;

//her er værdien af row og col 1.


for ( row = 0; row < 8; row++ ) {
//Du har nu overskrevet værdien af row og sat den til 0.
for ( col = 0; col < 8; col++) {
//Du har nu overskrevet værdien af col og sat den til 0.
}

Hvis du skal bruge at de har værdien 1 til at starte med inde i løkken kan du gøre 2 forskellige ting. Du kan lave et sæt nye variable:

int row_outside = 1;
int col_outside = 1;

Og tilgå dem inde i løkken, eller hvis det du reelt set vil gøre er at starte løkken fra 1 så skrive:
for ( row = 1; row < 8; row++ ) {}



aaah, tak skal i have :)



bemærk at der er forskel på:
Fold kodeboks ind/udKode 

og
Fold kodeboks ind/udKode 


Det første eksempel kan ikke lade sig gøre, men det sidste kan godt.
I det første eksempel prøver jeg at definere row 2 gange. Det kan jeg ikke.
I det andet eksempel definere jeg først row, og så overskriver jeg den. Det kan jeg godt.

Din kode kan også skrives sådan her, vis du ikke skal bruge værdierne row og col uden for for-loopet:
Fold kodeboks ind/udKode 


Nu bliver værdierne først defineret i for loopet.
Den store forskel er, udover man spare 2 linjer, at col nu kun kan tilgås i det inderste loop, mens row kan tilgås i begge to, ingen af dem kan dog tilgås udefra.



Nu kender jeg godt nok ikke Java så godt men det er vel forhåbentligt muligt at incrementere med mere end 1:

så:
Fold kodeboks ind/udKode 

Burde være det samme som det i har, bare fære oparationer.


Hvis dette i øvrigt er for at danne et gitter er dete biligere at tegne de lodrette og vandrette streger hver for sig i stedet for at tegne den enkelte celle i gitteret.

Et 4x4 gitter har 16 celler, men kun 5 lodrette og 5 vandrette streger.



t