Gå til innhold

problem med metode innenfor Array


Anbefalte innlegg

Skal lage et dvd-arkiv, en såkalt "fixed-size collection", som skal inneholde 10 DVD-er, fra 0 til 9 da altså. Her er koden så langt: (er for øvrig veldig ny på java-koding)

 

public class Dvdarchive2
{
  private DVD[] dvds;

public Dvdarchive2() 
{
   dvds = new DVD[10];
}

public void enterNewDVD(String dvdTittel, int vareNummer, String skuespiller)
{
   new DVD(dvdTittel,vareNummer,skuespiller);
}    
   

} 

 

Vet at enterNewDVD-metoden er feil, da den vil hele tiden skrive over dvd nummer 0, eller den ikke vet hvor den skal lagre DVD-en, så bare se bort fra det stuntet. Lurer på hvordan jeg lager en metode innenfor array som automatisk sjekker hvilke verdier som er ledige i arkivet (0-9).

 

edit1: Bruker to klasser, Dvdarchive2 og DVD.

Endret av Chris88
Lenke til kommentar
Videoannonse
Annonse

I dette tilfellet ville jeg ikke brukt et array, men en ArrayList:

 

public class Dvdarchive2
{
 private List dvds;

public Dvdarchive2()
{
  dvds = new ArrayList();
}

public void enterNewDVD(String dvdTittel, int vareNummer, String skuespiller)
{
  if (dvd.size() < 10) {
    dvds.add(new DVD(dvdTittel,vareNummer,skuespiller));
  }
}    
  
public DVD getDVD(int index) {
 return (DVD)dvds.get(index);
}
}

 

Hilsen Werner

Lenke til kommentar

Hmm, jeg har faktisk samme problem, samme oppgave tydeligvis, hehe.

Tror du får samme problem som meg og her ved bruk av den koden som HV var så snill og skrive :)

 

  ca sånn

private int getNextFreeSlot(){
for(int i = 0; i < dvds.length();i++){
if(dvds[i] == null) return i;
}
return -1;
}

 

linje 2 i koden, "dvds,lenght()" skjønner ikke helt hva du prøver og oppnå der:

 

1. det er vel ikke en metode innenfor array, men en metode innenfor arraylist?

2. den gjenkjennes ikke som en metode av compilatoren.

 

Lurte derfor på også om denne skal skrives om til en kode la med metoden som skal legge til flere objeker da blir seende noe sånn ut:

 


public void enterDvD(String dvdTittel, String dvdActor, int Varenummer)
   {
       new DvD(dvdTittel, dvdActor, Varenummer);
   }

private int getNextFreeSlot()
{
      for(int i = 0; i < dvds.length();i++)
          {
             if(dvds[i] == null) return i;
             }
               return -1;
                 }

 

bare bygd sammen, (om dette er nødvendig).

 

Har spurt andre om hjelp og, som har påpekt at dette er et tung metode, er enig der, mer er da denne metoden foreleser har sagt vi skal gjøre det på.

Lenke til kommentar
dvds.length er en variabel, ikke en operator, bare så det er sagt ;)
En variabel kan tildeles en verdi, og det kan ikke length.

 

Werner

En konstant, med andre ord ...

9641338[/snapback]

 

Neppe. Konstanter i Java-sammenheng er deklarert med final, og kan ikke endres. Siden length kan endres under kjøring så er det ikke en konstant.

 

Werner

Lenke til kommentar
Neppe.  Konstanter i Java-sammenheng er deklarert med final, og kan ikke endres.  Siden length kan endres under kjøring så er det ikke en konstant.

 

Werner

9647146[/snapback]

 

Hvordan endres den under kjøring?

En array er da virkelig unmutable (når det gjelder lengden), ved at du ikke kan endre lengden på den uten å måtte lage en ny array... Og dermed endres ikke length...

Endret av Mr.Garibaldi
Lenke til kommentar
Neppe.  Konstanter i Java-sammenheng er deklarert med final, og kan ikke endres.

Du tar nok feil gitt. length er en instans variabel i array-objektet, deklarert som public final.

 

En ting som ofte er lurt er å se hva standardene og spesifikasjonene sier :) Feks Java Language Specification punkt 10.7 (Array Members), som sier: The public final field length, which contains the number of components of the array (length may be positive or zero).

"Field" er det vi på godt norsk kaller instans-variabel. Denne er dog ikke særlig variabel, men konstant.

 

En operator er noe helt annet. + er en operator. "." (punktum) er en annen operator. length er ikke en operator.

 

Siden length kan endres under kjøring så er det ikke en konstant.

Niks, feil igjen. La oss finne fram JLS punkt 10.2 (Array Variables) som sier: Once an array object is created, its length never changes.

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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...