Prizefighter Skrevet 1. oktober 2007 Del Skrevet 1. oktober 2007 (endret) 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 1. oktober 2007 av Chris88 Lenke til kommentar
HV Skrevet 1. oktober 2007 Del Skrevet 1. oktober 2007 ca sånn private int getNextFreeSlot(){ for(int i = 0; i < dvds.length();i++){ if(dvds == null) return i; } return -1; } Lenke til kommentar
___ Skrevet 1. oktober 2007 Del Skrevet 1. oktober 2007 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
jonasfd Skrevet 1. oktober 2007 Del Skrevet 1. oktober 2007 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
___ Skrevet 1. oktober 2007 Del Skrevet 1. oktober 2007 Når man jobber med arrayer, som er en "language feature", så snakker man ikke om metoder, men om operatorer. Derfor blir dvds.length() feil, mens det riktige er å bruke operatoren length. for(int i = 0; i < dvds.length;i++) Hilsen Werner Lenke til kommentar
Iyon Skrevet 1. oktober 2007 Del Skrevet 1. oktober 2007 dvds.length er en variabel, ikke en operator, bare så det er sagt Lenke til kommentar
___ Skrevet 2. oktober 2007 Del Skrevet 2. oktober 2007 dvds.length er en variabel, ikke en operator, bare så det er sagt 9613914[/snapback] En variabel kan tildeles en verdi, og det kan ikke length. Werner Lenke til kommentar
drool Skrevet 2. oktober 2007 Del Skrevet 2. oktober 2007 dvds.length er en variabel, ikke en operator, bare så det er sagt 9613914[/snapback] En variabel kan tildeles en verdi, og det kan ikke length. Werner 9618724[/snapback] Slik er length definert i et array public final int length = X; Lenke til kommentar
pgdx Skrevet 5. oktober 2007 Del Skrevet 5. oktober 2007 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 ... Lenke til kommentar
___ Skrevet 6. oktober 2007 Del Skrevet 6. oktober 2007 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
Mr.Garibaldi Skrevet 6. oktober 2007 Del Skrevet 6. oktober 2007 (endret) 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 6. oktober 2007 av Mr.Garibaldi Lenke til kommentar
steingrim Skrevet 6. oktober 2007 Del Skrevet 6. oktober 2007 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå