Gå til innhold
Trenger du skole- eller leksehjelp? Still spørsmål her ×

IT Eksamen 2012


Anbefalte innlegg

Videoannonse
Annonse

Har prøvd å lage et program hvor jeg kan søke etter personer, som da skal bli søkt opp fra et array. Hvis personen finnes skal det bli tracet Riktig og omvendt.. Hva er feil?

btnSøk.addEventListener(MouseEvent.CLICK, sok)
var navnArray:Array = new Array();
navnArray[0] = new Array("Kåre");
navnArray[1] = new Array("Ole");
navnArray[2] = new Array("Per");
var teller:int = 0;
var teller1:int = 0;
function sok(evt){
var navn:String = txtNavn.text;
while(teller < navnArray.length){

 while (teller1<navnArray.length+1){
  // trace(navnArray[teller][teller1])

 if(navnArray.indexOf(navn) != -1){
  trace ("Riktig");
  }
  else{
  trace ("Galt");
 }
teller1++;
   }
teller++;
teller1 = 0;
 }
}

Lenke til kommentar

Du trenger ingen løkke for å bruke indexOf. indexOf kjører selv gjennom hele arrayet, og gir tilbake enten indexen eller -1.

 

Dette er nok (ikke testet, men mener det skal funke):

searchForName_btn.addEventListener(MouseEvent.CLICK, searchForName)
var nameArry:Array = ["Nils", "Ole", "Per"]
function searchForName(e:MouseEvent) {
 var navn:String = name_txt.text;
 if(nameArry.indexOf(navn) != -1) trace ("Riktig");
 else trace ("Galt");
}

Endret av Fred7555
  • Liker 2
Lenke til kommentar

Takk for det!

Men si da at arrayen ser slik ut(to dimensjonal?):

btnSøk.addEventListener(MouseEvent.CLICK, søkEtterNavn)
var navnArray:Array = new Array();
navnArray[0] = new Array("Kåre");
navnArray[1] = new Array("Ole");
navnArray[2] = new Array("Per");
function søkEtterNavn(e:MouseEvent) {
	 var navn:String = txtNavn.text;
	 if(navnArray.indexOf(navn) != -1){
  trace ("Riktig");
  }
	 else{
   trace ("Galt");
  }
}

Da fungerer det ikke...

Vil ha den sann da jeg tenker det kan komme en oppgave hvor man må vite f eks hvor mange medaljer hver person har vunnet. og da kan jo arrayen bli noe som dette:

var navnArray:Array = new Array();
navnArray[0] = new Array(navn: "Kåre", medaljer: 3 );
navnArray[1] = new Array(navn: "Ole"), medaljer: 1 );
navnArray[2] = new Array(navn: "Per"), medaljer: 5);

 

eller?

Lenke til kommentar

For en sånn array må du dra frem løkken.

 

btnSøk.addEventListener(MouseEvent.CLICK, sok)
var navnArray:Array = new Array();
navnArray[0] = new Array("Kåre");
navnArray[1] = new Array("Ole");
navnArray[2] = new Array("Per");
function sok(evt:MouseEvent)
{
var navn:String = txtNavn.text;
for(var teller:int = 0; teller < navnArray.length; teller++)
{
 if(navnArray[teller].indexOf(navn) != -1)
 {
  trace ("Riktig");
 }
 else
 {
  trace ("Galt");
 }
}
}

  • Liker 1
Lenke til kommentar

Får ikke noen av scriptene deres til å fungere jeg, men er det ikke feil å definere en new Array når det bare er en i lista.

Altså, endimensjonal:

var navnArray:Array = new Array();

navnArray[0] = "Sindre"

navnArray[1] = "Ole"

navnArray[3] = "Martin"

todimensjonal:

var navnArray:Array = new Array();

navnArray[0] = new Array( "Sindre", 2)

navnArray[1] = new Array("Ole", 8)

navnArray[3] = new Array("Martin", 4)

Lenke til kommentar

Hvorfor bruke så mange linjer, når det holder å bruke: ?

 

En-dimensjonal:

var nameArry:Array = ["Sindre", "Ole", "Martin]

 

To-dimensjonal:

var nameArry:Array = [ ["Sindre", 2], ["Ole", 8], ["Martin", 4] ]

Sant, bare vandt med det fra timene, også er det mer oversiktlig, men er jo selvfølgelig lettere :)

Lenke til kommentar

Såklart, man bruker jo sinde egne metoder :)

Om det er 3-4 linjer, så gjør det jo ikke noe, men når du legger til 10+ elementer i et array på den måten, så blir det plutselig velge mange 'unødvendige' linjer som kunne ha forkortest ned.

 

Også husk å ha god, strukturert og kommentert kode under eksamen.

Mye bedre å ha oversiktlig og godt kommentert kode, enn å ha fult av ting her og der uten noen form for oversikt.

De fleste vet sikkert det, og det er nokså innlysende, men ekstra viktig på eksamen, da det er det som er førsteinntrykket sensoren får om deg.

Lenke til kommentar

Noen her nå? Hvordan finner man lengden på en todimensjonal tabell?

 

var idrett: Array=new Array();

idrett[0]=new Array("Friidrett", "Håndball", "Svømming");

idrett[1]=new Array("Basket", "Fotball", "Sprint", "Svømming");

 

Altså lengen på tabellene som ligger i tabellen idrett.

Lenke til kommentar

Ikke 100%, da jeg ikke får tid til å teste eller brukt i det siste, men jeg vil anta at en av disse vil funke:

var len1:int = idrett[0].length;
var len2:int = idrett[1].length;
var len:int = len1 + len2;

 

var len1:int = 0;
var len2:int = 0;

for (var row:int = 0; row < idrett.lengh; row++) {
  len1++;
  for (var column:int = 0; column < idrett[row].length; column++) {
 len2++;
  }
}
var len:int = len1 + len2;

Endret av Fred7555
Lenke til kommentar

^ tuuusen takk! nå er mitt eneste problem den heelsikes søkinga i tabeller. vet at det har blitt forsøkt forklart her inne, men jeg må innrømme at jeg ikke helt har forstått det enda. men det blir vel kanskje for komplisert å forklare for et forvirret hode før klokka er åtte også.

Lenke til kommentar

Klarte å gå tilbake, dermed ble hele forklaringen slettet, og ikke tid til å skrive alt igjen, men prøver å huske det jeg skrev :/

 

nameOfArray.indexOf("det du søker etter, gåseøyne om det er en string), går som sagt gjennom arrayet.

Det den gjør, er å gå igjennom raden, og i et en-dimensjonalt array er det bare en rad, altså funker det helt fint.

 

Men når vi kommer til fler-dimensjonalt, så har den flere rader, og indexOf tar bare for seg den første, altså nameOfArray[0]-raden.

Så når vi ønsker å søke igjennom hele arrayet, må vi tilby indexOf alle radene i arrayet, så søker den igjennom alle kolonnene i raden vi tilbyr.

Det kan gjøres på flere måter, men den under er grei og fin. Bruker oppsetter ditt:

var idrett: Array=new Array();
idrett[0]=new Array("Friidrett", "Håndball", "Svømming");
idrett[1]=new Array("Basket", "Fotball", "Sprint", "Svømming");

for (var i:int = 0; < idrett.length; i++) {
 if (idrett[i].indexOf("....") == -1) ...skjer om det ikke finnes....

 if (idrett[i].indexOf("....") != -1) ... skjer om det finnes....

}

Den går da gjennom 0 og helt til siste rad, og dermed gir du metoden(indexOf) alle radene, og den går selv gjennom kolonnene, og om det ikke finnes blir det -1, og om det finnes blir det indexen som sagt.

 

On du bare skal gå igjennom arrayet for å sjekke om noe finnes, og ikke bruke det, så er det ikke vits å huske i.

Men om du skal bruke rad-nummeret videre, f.eks. et annet array har samme struktur med en annen idrett, eller du skal bruke det til å finne personer før/etter ol., så må du huske i-en, da det er rad-nummeret det ble funnet på.

 

Håper du skjønner det litt bedre hvertfall :)

Endret av Fred7555
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...