13375k1133z Skrevet 23. mars 2011 Del Skrevet 23. mars 2011 Står bom fast og har ikke anelse hva jeg skal gjøre i koden, håper derfor på litt hjelp her! Til informasjon består programmet av 5 klasser, antar det er bare koden til to av dem som er aktuelt for å fikse problemet jeg har, har derfor bare postet koden til disse "filene". Det jeg trenger hjelp til er innhold i følgende metoder i klassen produkt: beregnGjennomsnittAntallStjerner, lagAntallStjernerHyppighetsTab() og public void skrivHistogram() {. Den første metoden: beregnGjennomsnittAntallStjerner skal gjøre følgende: Gjennomsnitt antall stjerner tildelt dette produktet, * avrundes til nærmeste heltall. Koden jeg skrev til denne metoden er som følger (uten at det funket): public int beregnGjennomsnittAntallStjerner() { gjennomsnitt = antallStjerner / antallAnmeldelser; } return gjennomsnitt } Ellers har jeg egentlig ikke peiling på hvordan jeg skal konstruere de andre metodene på tross av mye leiting etter informasjon på internett. Metoden skrivHistogram skal gjøre følgende: Det skal bli skrevet ut et histogram over antall stjerner-hyppighet til anmeldelser. . * d.v.s. antall anmeldelser som fikk 5, 4, 3 o.s.v. stjerner. * Eksempel pÃ¥ histogram nedenfor viser at 1 anmeldelse til dette produktet * fikk 5 stjerner, 2 anmeldelser til dette produktet fikk 4 stjerner, og * 2 anmeldelser til dette produktet fikk 3 stjerner: Stjerner: Antall anmeldelser 5: + (1) 4: ++ (2) 3: ++ (2) 2: (0) 1: (0) 0: (0) og til slutt metoden: lagAntallStjernerHyppighetsTab(). denne metoden skal gjøre følgende: * Lager en hyppighetstabell over antall stjerner-hyppighet til anmeldelser, * d.v.s. antall anmeldelser som fikk 0, 1, 2, o.s.v. stjerner. * @return tabell med antall stjerner-hyppigheter */ Koden til klassen med disse metodene: /** Klassen som representerer et produkt. */ public class Produkt { /** Maks antall anmeldelser som et produkt kan fÃ¥. */ public final int MAKS_ANTALL_ANMELDELSER = 100; /** Navn pÃ¥ dette produktet. */ private String prodNavn; /** Avdelingen dette produktet tilhører. */ private Avdeling avdeling; /** Tabell som inneholder anmeldelser for dette produktet. */ private Anmeldelse[] anmeldelser; /** Teller som angir hvor mange anmeldelser dette produktet har fÃ¥tt. */ private int antallAnmeldelser; /** Konstruktør for Ã¥ initialisere et produkt. * @param prodNavn Navn pÃ¥ dette produktet. * @param avdeling Avdelingen dette produktet tilhører. */ Produkt(String prodNavn, Avdeling avdeling) { this.prodNavn = prodNavn; this.avdeling = avdeling; this.anmeldelser = new Anmeldelse[MAKS_ANTALL_ANMELDELSER]; this.antallAnmeldelser = 0; } /** @return Navn pÃ¥ produktet. */ public String hentProduktNavn() { return prodNavn; } /** @return Avdelingen dette produktet tilhører. */ public Avdeling hentAvdeling() { return avdeling; } /** @return Antall anmeldelser dette produktet har fÃ¥tt. */ public int hentAntallAnmeldelser() { return antallAnmeldelser; } * @param indeks Anmeldelsen angitt ved indeks skal returneres. * @return anmeldelsen angitt ved indeks, null dersom indeks er ulovlig. */ public Anmeldelse hentAnmeldelse(int indeks) { Anmeldelse anmeldelse = null; if (0 <= indeks && indeks <= antallAnmeldelser) anmeldelse = anmeldelser [indeks]; return anmeldelse; } /** Finner indeks til angitt anmeldelse i tabellen over anmeldelser. * @param anmeldelse Metoden finner indeks til denne anmeldelsen. * @return indeks til angitt anmeldelse dersom den finnes, -1 ellers. */ public int finnAnmeldelseIndeks(Anmeldelse anmeldelse) { return HjelpeKlasse.finnNøkkel(anmeldelser, antallAnmeldelser, anmeldelse); } /** Innsetter angitt anmeldelse for dette produktet. * @param anmeldelse Anmeldelsen som skal settes inn. * @return true dersom anmeldelsen ble innsatt, false ellers. */ public boolean innsettAnmeldelse(Anmeldelse anmeldelse) { boolean ok = antallAnmeldelser < MAKS_ANTALL_ANMELDELSER && anmeldelse != null; if (ok) anmeldelser[antallAnmeldelser++] = anmeldelse; return ok; } /** @return Totalt antall nyttige stemmer som har blitt gitt til * anmeldelsene for dette produktet. */ public int beregnTotaltAntallNyttigeStemmer() { int antall = 0; for (int i = 0; i < antallAnmeldelser; ++i) { antall += anmeldelser[i].hentAntallNyttige(); } return antall; } * @return Totalt antall ikke-nyttige stemmer som har blitt gitt til * anmeldelsene for dette produktet. */ public int beregnTotaltAntallIkkeNyttigeStemmer() { int antall = 0; for (int i = 0; i < antallAnmeldelser; ++i) { antall += anmeldelser [i].hentAntallIkkeNyttige(); } return antall; } * @return Gjennomsnitt antall stjerner tildelt dette produktet, * avrundes til nærmeste heltall. */ public int beregnGjennomsnittAntallStjerner() { gjennomsnitt = antallStjerner / antallAnmeldelser; } return gjennomsnitt; } * Lager en hyppighetstabell over antall stjerner-hyppighet til anmeldelser, * d.v.s. antall anmeldelser som fikk 0, 1, 2, o.s.v. stjerner. * @return tabell med antall stjerner-hyppigheter */ public int[] lagAntallStjernerHyppighetsTab() { } /** * Skriver histogram over antall stjerner-hyppighet til anmeldelser. * d.v.s. antall anmeldelser som fikk 5, 4, 3 o.s.v. stjerner. * Eksempel pÃ¥ histogram nedenfor viser at 1 anmeldelse til dette produktet * fikk 5 stjerner, 2 anmeldelser til dette produktet fikk 4 stjerner, og * 2 anmeldelser til dette produktet fikk 3 stjerner: Stjerner: Antall anmeldelser 5: + (1) 4: ++ (2) 3: ++ (2) 2: (0) 1: (0) 0: (0) */ public void skrivHistogram() { // } /** Sammenligner to produkter for likhet. * To produkter er like dersom de har samme navn og tilhører samme avdeling. * @param obj det andre produktet som dette objektet skal sammenlignes med. * @return true dersom de to produktene er like, false ellers. */ public boolean equals(Object obj) { if (this == obj) { return true; } if (!(obj instanceof Produkt)) { return false; } Produkt produkt = (Produkt)obj; return this.prodNavn.equals(produkt.prodNavn) && this.avdeling.equals(produkt.avdeling); } /** @return Strengrepresentasjon av dette produktet pÃ¥ følgende format: * <produkt navn> har <antall anmeldelser> anmeldelser: * <streng med gjennomsnitt antall '*'> * (Totalt antall nyttige: <totalt antall nyttige>, * Totalt antall ikke-nyttige: <totalt antall ikke-nyttige>). * Eksempel: Java pÃ¥ 5 min. har 2 anmeldelser: ** * (Totalt antall nyttige: 6, Totalt antall ikke nyttige: 10) */ public String toString() { return String.format("%s har %d anmeldelse(r): %-5s%n" + " (Totalt antall nyttige: %d, Totalt antall ikke-nyttige: %d)", this.prodNavn, this.antallAnmeldelser, HjelpeKlasse.fyllStreng(this.beregnGjennomsnittAntallStjerner(), '*'), this.beregnTotaltAntallNyttigeStemmer(), this.beregnTotaltAntallIkkeNyttigeStemmer()); } } koden til klassen, klassen produkt henter informasjon fra: /** Klassen som representerer en anmeldelse. */ public class Anmeldelse { /** Maks antall stjerner som en anmeldelse kan fÃ¥. */ public final static int MAKS_ANTALL_STJERNER = 5; /** Produktet denne anmeldelsen gjelder. */ private Produkt produkt; /** Tekst for anmeldelsen. */ private String anmeldelseTekst; /** Antall stjerner som denne anmeldelsen har fÃ¥tt tildelt. */ private int antallStjerner; /** Leser-stemmer som mener at denne anmeldelsen er nyttig.*/ private int antallNyttige; /** Leser-stemmer som mener at denne anmeldelsen er ikke nyttig. */ private int antallIkkeNyttige; /** Konstruktør for Ã¥ initialisere en anmeldelse. * @param produkt Produktet denne anmeldelsen gjelder. * @param anmeldelseTekst Tekst for anmeldelsen. * @param antallStjerner Antall stjerner tildelt denne anmeldelsen. */ public Anmeldelse(Produkt produkt, String anmeldelseTekst, int antallStjerner) { this.produkt = produkt; this.anmeldelseTekst = anmeldelseTekst; this.antallStjerner = antallStjerner; this.antallNyttige = 0; this.antallIkkeNyttige = 0; } /** @return Produktet som denne anmeldelsen gjelder. */ public Produkt hentProdukt() { return produkt; } /**@return Tekst for denne anmeldelsen. */ public String hentAnmeldelseTekst() { return anmeldelseTekst; } /** @return Antall stjerner tildelt denne anmeldelsen. */ public int hentAntallStjerner() { return antallStjerner; } /** @return Antall nyttige leser-stemmer for denne anmeldelsen. */ public int hentAntallNyttige() { return antallNyttige; } /** @return Antall ikke-nyttige leser-stemmer for denne anmeldelsen. */ public int hentAntallIkkeNyttige() { return antallIkkeNyttige; } /** Legger til angitt antall nyttige leser-stemmer. * @param antall Antall leser-stemmer som skal legges til nyttige * stemmer for denne anmeldelsen. */ public void leggTilNyttige(int antall) { this.antallNyttige += antall; } /** Legger til antall ikke-nyttige leser-stemmer. * @param antall Antall leser-stemmer som skal legges til ikke-nyttige * stemmer for denne anmeldelsen. */ public void leggTilIkkeNyttige(int antall) { this.antallIkkeNyttige += antall; } * Sammenligner to anmeldelser for likhet. * To anmeldelser er like dersom de (a) gjelder samme produkt, (b) har lik * anmeldelsestekst og (c) har fÃ¥tt likt antall stjerner. * @param obj den andre anmeldelsen * @return true dersom de to ameldelsene er like, false ellers. */ public boolean equals(Object obj) { if (this == obj) { return true; } if (!(obj instanceof Anmeldelse )) { return false; } return false; } * @return Strengrepresentasjon av denne anmeldelsen følgende format: * <anmeldelsetekst> <streng med antall '*'> (Nyttige: <antall nyttige>, * Ikke-nyttige: <antall ikke-nyttige>) * Eksempel: Knakende god! **** (Nyttige: 8, Ikke nyttige: 7) */ public String toString() { return String.format("%s har %d anmeldelse(r): %-5s%n" + " (Totalt antall nyttige: %d, Totalt antall ikke-nyttige: %d)", this.anmeldelseTekst, this.antallStjerner, this.antallNyttige, this.antallIkkeNyttige); } } Håper noen orker å hjelpe meg, takker på forhånd! Lenke til kommentar
srbz Skrevet 23. mars 2011 Del Skrevet 23. mars 2011 (endret) For det aller, aller første: Det holder ikke med * for å indikere kommentarer, du må ha / foran og bak, eksempelvis som under /* * kommentar her */ Jeg copypastet koden din inn i Eclipse og får i første omgang nøyaktig 100 feilmeldinger. Nå må jeg renskrive dette før jeg i det hele tatt orker å se på det kodemessige. Jeg har kjapt renskrevet kommentarfeilene dine i klassen Produkt.java, indentert koden, og lagt den ut på pastie.org så jeg kan referere til linjenummer. - På linje 88 har du to variabler (gjennomsnitt og antallStjerner) som aldri blir initiert. - På linje 95 har du en } som ikke skal være der. Dette fører til at koden under denne ikke ble autoindentert (merk alt -> ctrl+i i Eclipse). Ytterligere feilmeldinger jeg får opp er utelukkende relatert til manglende klasser. Slenger du ut resten av klassene kan vi kontrollere om dette vil medføre flere feil. I klassen Anmeldelser.java får jeg ingen feilmeldinger etter å ha rettet opp i kommentarfeilene dine. Du kan forøvrig være litt rausere med linjeskift, det blir veldig mange variabler/metoder med tilhørende kommentarer uten mellomrom. Har nå redusert antall feilmeldinger i disse to klassene fra 100 til 12. For å lage metoder som skriver ut statistikk som baserer seg på "antall stjerner" må du først holde styr på hvor mange stjerner det dreier seg om. Jeg kan ikke se at du på noe tidspunkt gjør dette. (edit: Sorry, du gjør visst det, men i den andre klassen. Du må isåfall referere til det på en annen måte.) leetsklleez - jeg mener jeg har sagt det før, men jeg sier det isåfall igjen: bruk Eclipse til å programmere i. Eclipse retter alle disse tullete feilene for deg, eller gir deg i det minste utvetydige pekepinner på hva som er galt. Jeg regner med du går datateknologi på UiB, og du vil før eller siden bli nødt til å bruke Eclipse i dette studiet. Dette er forøvrig installert på samtlige maskiner på faklab. Hvis koden her er skrevet i Eclipse har du tydeligvis ignorert de 100 feilmeldingene du må ha fått opp, og jeg vil isåfall omformulere oppfordringen min til "du må begynne å lese de feilmeldingene Eclipse gir deg". public String toString() { return String.format("%s har %d anmeldelse(r): %-5s%n" + " (Totalt antall nyttige: %d, Totalt antall ikke-nyttige: %d)", this.anmeldelseTekst, this.antallStjerner, this.antallNyttige, this.antallIkkeNyttige); } Denne formaterte strengen tar flere variabler enn du gir. Ok, jeg skulle gjerne ha forklart deg hvordan du skriver ut histogrammet, men jeg aner ikke hvordan du holder styr på hvor mange forekomster det er av hver poenggivning. For å kunne si noe om hvor mange som har gitt 1, 2, 3, 4 og 5 stjerner holder det ikke at du vet hvor mange som har stemt og hvor mange stjerner produktet har fått totalt. Dersom fem personer har stemt og produktet har totalt 20 stjerner, hvordan kan du da vite hvor mange som har gitt 3 stjerner? Dette må du ha i en tabell et sted (eller i hver sin tellevariabel). Endret 23. mars 2011 av srbz Lenke til kommentar
13375k1133z Skrevet 23. mars 2011 Forfatter Del Skrevet 23. mars 2011 Takker så mye for tilbakemelding. Jeg har tatt i bruk Eclipse etter oppfordring fra deg (takk for tipset), uten eclipse hadde jeg nok hatt langt fler feilmeldinger. Jeg kan bare se feilmeldinger på de de nevnte klassene, siden de ikke har noe innhold. Som nevnt trenger jeg hjelp med metoden (trengs for å lage hyppighetstabell) public int[] lagAntallStjernerHyppighetsTab() { og public void skrivHistogram() { som bruker metoden ovenfor (de eneste jeg ikke har klart å lage) Lenke til kommentar
srbz Skrevet 23. mars 2011 Del Skrevet 23. mars 2011 (endret) Som nevnt trenger jeg hjelp med metoden (trengs for å lage hyppighetstabell) public int[] lagAntallStjernerHyppighetsTab() { og public void skrivHistogram() { som bruker metoden ovenfor (de eneste jeg ikke har klart å lage) Som nevnt er du nødt å holde orden i antall stjerner på en slik måte at du klarer å skille de ulike poenggivningene fra hverandre. For å lage histogram er du nødt å vite hvor mange ganger 1, 2, 3, 4 og 5 stjerner forekommer. Du har ingen mulighet til å finne ut hvor mange forekomster det er av hver av disse kun basert på summen av alle stemmer gitt, og antall stemmer. Som sagt, om summen er 20 og fem stemmer er avlagt kan fordelingen eksempelvis være 4 + 4 + 4 + 4 + 4 = 20, eller 2 + 3 + 5 + 5 + 5 = 20. Du må altså vite på forhånd hvor mange 1ere som er gitt, hvor mange 2ere som er gitt osv. Dette er ikke noe du kan regne deg frem til. Jeg foreslår at du oppretter en tabell/array (int[]) istedenfor bare en int, der int[0] gir deg antall 1ere, int [1] gir deg antall 2ere ... og int[4] gir deg antall 5ere. Da kan du enkelt regne sammen summen slik: int sum = 0; for(int i=0; i<=4; i++){ sum += int[i]; } samtidig som du holder orden på antall forekomster av hvert enkelt stemmevalg. Denne tabellen må opprettes i den klassen der du holder styr på antall stjerner. Når du har dette på plass er det en smal sak å skrive ut histogram. Denne tabellen vil strengt tatt være histogrammet, du trenger bare å skrive den ut på en måte som ser grei ut. Ang. hyppighetstabell, kan du ikke lage en lignende tabell, iterere over alle gjennomsnittsresultater, og legge dette gjennomsnittet til tabellen? Slik jeg forstår det skal denne holde styr på hvor mange produkter som har karakter 1, 2, 3, 4 og 5 i gjennomsnitt? Altså, om eksempelvis tre produkter har gjennomsnittskarakter 2, så skal entry nr 2 i denne tabellen ha verdi 3? edit: liiiten regnefeil av meg lenger oppe. Har ikke sovet i natt, da er det fort gjort. Endret 23. mars 2011 av srbz Lenke til kommentar
GeirGrusom Skrevet 23. mars 2011 Del Skrevet 23. mars 2011 Ikke bruk arrays, bruk heller ArrayList<int>. Lenke til kommentar
srbz Skrevet 23. mars 2011 Del Skrevet 23. mars 2011 Går da helt fint å bruke arrays så lenge det er forhåndsbestemt at det skal være fem ulike "karakternivåer". Lenke til kommentar
GeirGrusom Skrevet 23. mars 2011 Del Skrevet 23. mars 2011 I dette tilfellet er det bare en begrensning i programmet mer eller mindre. Du har også en constructor som kan sette InitialCapacity som parameter. Lenke til kommentar
13375k1133z Skrevet 23. mars 2011 Forfatter Del Skrevet 23. mars 2011 (endret) Takker for tilbakemeldinger, det var langt vanskeligere å få til å skrive ut histogram og hyppighetstabell enn det jeg tenkte meg. Hvis noen kunne hjulpet meg litt med koden til de nevnte metodene (eventuelt også gjennomsnitt), hadde det vært fantastisk, sitter bom fast. (gir 50.- som takk for hjelpen) La forøvrig ikke merke til at srbz ønsket at jeg skulle legge ut alle klassene. Her er klassene: klassen anmeldelse : /** Klassen som representerer en anmeldelse. */ public class Anmeldelse { /** Maks antall stjerner som en anmeldelse kan fÃ¥. */ public final static int MAKS_ANTALL_STJERNER = 5; /** Produktet denne anmeldelsen gjelder. */ private Produkt produkt; /** Tekst for anmeldelsen. */ private String anmeldelseTekst; /** Antall stjerner som denne anmeldelsen har fÃ¥tt tildelt. */ private int antallStjerner; /** Leser-stemmer som mener at denne anmeldelsen er nyttig.*/ private int antallNyttige; /** Leser-stemmer som mener at denne anmeldelsen er ikke nyttig. */ private int antallIkkeNyttige; /** Konstruktør for Ã¥ initialisere en anmeldelse. * @param produkt Produktet denne anmeldelsen gjelder. * @param anmeldelseTekst Tekst for anmeldelsen. * @param antallStjerner Antall stjerner tildelt denne anmeldelsen. */ public Anmeldelse(Produkt produkt, String anmeldelseTekst, int antallStjerner) { this.produkt = produkt; this.anmeldelseTekst = anmeldelseTekst; this.antallStjerner = antallStjerner; this.antallNyttige = 0; this.antallIkkeNyttige = 0; } /** @return Produktet som denne anmeldelsen gjelder. */ public Produkt hentProdukt() { return produkt; } /**@return Tekst for denne anmeldelsen. */ public String hentAnmeldelseTekst() { return anmeldelseTekst; } /** @return Antall stjerner tildelt denne anmeldelsen. */ public int hentAntallStjerner() { return antallStjerner; } /** @return Antall nyttige leser-stemmer for denne anmeldelsen. */ public int hentAntallNyttige() { return antallNyttige; } /** @return Antall ikke-nyttige leser-stemmer for denne anmeldelsen. */ public int hentAntallIkkeNyttige() { return antallIkkeNyttige; } /** Legger til angitt antall nyttige leser-stemmer. * @param antall Antall leser-stemmer som skal legges til nyttige * stemmer for denne anmeldelsen. */ public void leggTilNyttige(int antall) { this.antallNyttige += antall; } /** Legger til antall ikke-nyttige leser-stemmer. * @param antall Antall leser-stemmer som skal legges til ikke-nyttige * stemmer for denne anmeldelsen. */ public void leggTilIkkeNyttige(int antall) { this.antallIkkeNyttige += antall; } /* * Sammenligner to anmeldelser for likhet. * To anmeldelser er like dersom de (a) gjelder samme produkt, (b) har lik * anmeldelsestekst og (c) har fÃ¥tt likt antall stjerner. * @param obj den andre anmeldelsen * @return true dersom de to ameldelsene er like, false ellers. */ public boolean equals(Object obj) { if (this == obj) { return true; } if (!(obj instanceof Anmeldelse )) { return false; } return false; } /* * @return Strengrepresentasjon av denne anmeldelsen følgende format: * <anmeldelsetekst> <streng med antall '*'> (Nyttige: <antall nyttige>, * Ikke-nyttige: <antall ikke-nyttige>) * Eksempel: Knakende god! **** (Nyttige: 8, Ikke nyttige: 7) */ public String toString() { return String.format("%s har %d anmeldelse(r): %-5s%n" + " (Totalt antall nyttige: %d, Totalt antall ikke-nyttige: %d)", this.anmeldelseTekst, this.antallStjerner, this.antallNyttige, this.antallIkkeNyttige); } } Klassen avdeling: /** Klasse som representerer en avdeling. */ class Avdeling { /** Navn pÃ¥ denne avdelingen */ private String avdNavn; /** Tabell som inneholder produkter for denne avdelingen */ private Produkt[] produkter; /** Antall produkter i denne avdelingen */ private int antallProdukter; /* * Konstruktør for Ã¥ initialisere en avdeling. * @param avdNavn Navn pÃ¥ denne avdelingen. * @param maksAntallProdukter Maks antall produkter som kan tilhøre * denne avdelingen. */ public Avdeling(String avdNavn, int maksAntallProdukter) { this.avdNavn = avdNavn; this.antallProdukter = maksAntallProdukter; } /** @return navn pÃ¥ denne avdelingen. */ public String hentAvdNavn() { return this.avdNavn; } /** @return antall produkter i denne avdelingen. */ public int hentAntallProdukter() { return this.antallProdukter; } // @return totalt antall anmeldelser for alle produkter i denne avdelingen public int finnTotaltAntallAnmeldelser() { return this.anmeldelser; } /** @return produkt angitt ved indeks, null dersom indeks er ulovlig * @param indeks Produkt angitt ved indeks i produkttabellen skal returneres */ public Produkt hentProdukt(int indeks) { Produkt produkt = null; if (0 <= indeks && indeks <= antallProdukter) produkt = produkter[indeks]; return produkt; } /** Finner indeks til angitt produkt i denne avdelingen. * @param produkt som indeks i produkttabellen skal finnes. * @return indeks til angitt produkt dersom det ble funnet, -1 ellers. */ public int finnProduktIndeks(Produkt produkt) { return HjelpeKlasse.finnNøkkel(produkter, antallProdukter, produkt); } /* * Innsetter et produkt i produkttabellen, dersom (a) det er plass i * produkttabellen, (b) produkt ikke er null og (c) ikke finnes fra før * i produkttabellen. * @param produkt som skal forsøkes innsatt i produkttabellen. * @return true dersom angitt produkt ble innsatt, false ellers. */ public boolean innsettProdukt(Produkt produkt) { // Skriv kode for denne metoden boolean ok = antallProdukter < maksAntallProdukter && produkt !=null; if (ok) produkter[antallProdukter++] = produkt; return ok; } /** Sammenligner to avdelinger for likhet. To avdelinger er like dersom de har samme navn. * @param obj den andre avdelingen som dette objektet skal sammenlignes med. * @return true dersom de to avdelingene er like, false ellers. */ public boolean equals(Object obj) { if (this == obj) { return true; } if (!(obj instanceof Avdeling)) { return false; } Avdeling avdeling = (Avdeling) obj; return this.avdNavn.equals(avdeling.avdNavn); } /** @return Strengrepresentasjon av denne avdelingen pÃ¥ følgende format: * <avdelingsnavn> har <antall produkter> produkter som til sammen har fÃ¥tt * <totalt antall anmeldelser> anmeldelse(r). * Eksempel: * Avdelingen Bøker har 3 produkter som til sammen har fÃ¥tt 8 anmeldelse(r). */ public String toString() { return String.format("Avdelingen %s har %d produkter som til sammen har fÃ¥tt %d anmeldelse(r).", this.avdNavn, this.antallProdukter, this.finnTotaltAntallAnmeldelser()); } } klassen nettbutikk: /** Klassen som representerer en forenklet nettbutikk. */ public class Nettbutikk { public static void main(String[] args) { // Opprett en bokavdeling med 500 bøker Avdeling bokAvdeling = new Avdeling("Bøker", 500); init(bokAvdeling); System.out.println(bokAvdeling); System.out.println("OVERSIKT OVER PRODUKTER OG DERES ANMELDELSER I BOKAVDELINGEN:"); for (int i = 0; i < bokAvdeling.hentAntallProdukter(); ++i) { Produkt produkt = bokAvdeling.hentProdukt(i); System.out.println(produkt); int antallAnmeldelser = produkt.hentAntallAnmeldelser(); for (int j = 0; j < antallAnmeldelser; ++j) { Anmeldelse anmeldelse = produkt.hentAnmeldelse(j); System.out.println(anmeldelse); } System.out.println(); } System.out.println("HISTORGRAM OVER ANTALL STJERNER-HYPPIGHET TIL " + "ANMELDELSER FOR HVERT PRODUKT I BOKAVDELINGEN:"); for (int i = 0; i < bokAvdeling.hentAntallProdukter(); ++i) { Produkt bok = bokAvdeling.hentProdukt(i); System.out.println(bok); bok.skrivHistogram(); System.out.println(); } } private static void init(Avdeling bokAvdeling) { // 1. bok med 5 anmeldelser Produkt bok = new Produkt("Java Jumpstart", bokAvdeling); bokAvdeling.innsettProdukt(bok); bok.innsettAnmeldelse(new Anmeldelse(bok, "Grådig god. Løp og kjøp!", 5)); Anmeldelse anmeldelse = bokAvdeling.hentProdukt(0).hentAnmeldelse(0); anmeldelse.leggTilNyttige(9); anmeldelse.leggTilIkkeNyttige(11); bok.innsettAnmeldelse(new Anmeldelse(bok, "Knakende god!", 4)); anmeldelse = bokAvdeling.hentProdukt(0).hentAnmeldelse(1); anmeldelse.leggTilIkkeNyttige(7); bok.innsettAnmeldelse(new Anmeldelse(bok, "Spennende!", 4)); anmeldelse = bokAvdeling.hentProdukt(0).hentAnmeldelse(2); anmeldelse.leggTilNyttige(8); anmeldelse.leggTilIkkeNyttige(6); bok.innsettAnmeldelse(new Anmeldelse(bok, "Anbefales!", 3)); anmeldelse = bokAvdeling.hentProdukt(0).hentAnmeldelse(3); anmeldelse.leggTilNyttige(8); anmeldelse.leggTilIkkeNyttige(10); bok.innsettAnmeldelse(new Anmeldelse(bok, "Vanskelig men god bok.", 3)); anmeldelse = bokAvdeling.hentProdukt(0).hentAnmeldelse(4); anmeldelse.leggTilNyttige(7); anmeldelse.leggTilIkkeNyttige(5); // 2. bok med 2 anmeldelser bok = new Produkt("Java pÃ¥ 5 min.", bokAvdeling); bokAvdeling.innsettProdukt(bok); bok.innsettAnmeldelse(new Anmeldelse(bok, "Styr unna!", 1)); anmeldelse = bokAvdeling.hentProdukt(1).hentAnmeldelse(0); anmeldelse.leggTilNyttige(2); anmeldelse.leggTilIkkeNyttige(4); bok.innsettAnmeldelse(new Anmeldelse(bok, "Har ingen kodeeksempler!", 2)); anmeldelse = bokAvdeling.hentProdukt(1).hentAnmeldelse(1); anmeldelse.leggTilNyttige(4); anmeldelse.leggTilIkkeNyttige(6); // 3. bok med 1 anmeldelse bok = new Produkt("Jambo Java", bokAvdeling); bokAvdeling.innsettProdukt(bok); bok.innsettAnmeldelse(new Anmeldelse(bok,"Den er jo på swahili! Kult!",5)); anmeldelse = bokAvdeling.hentProdukt(2).hentAnmeldelse(0); anmeldelse.leggTilNyttige(3); anmeldelse.leggTilIkkeNyttige(7); } } og til slutt klassen produkt: /** Klassen som representerer et produkt. */ public class Produkt { /** Maks antall anmeldelser som et produkt kan fÃ¥. */ public final int MAKS_ANTALL_ANMELDELSER = 100; /** Navn pÃ¥ dette produktet. */ private String prodNavn; /** Avdelingen dette produktet tilhører. */ private Avdeling avdeling; /** Tabell som inneholder anmeldelser for dette produktet. */ private Anmeldelse[] anmeldelser; /** Teller som angir hvor mange anmeldelser dette produktet har fÃ¥tt. */ private int antallAnmeldelser; /** Konstruktør for Ã¥ initialisere et produkt. * @param prodNavn Navn pÃ¥ dette produktet. * @param avdeling Avdelingen dette produktet tilhører. */ Produkt(String prodNavn, Avdeling avdeling) { this.prodNavn = prodNavn; this.avdeling = avdeling; this.anmeldelser = new Anmeldelse[MAKS_ANTALL_ANMELDELSER]; this.antallAnmeldelser = 0; } /** @return Navn pÃ¥ produktet. */ public String hentProduktNavn() { return prodNavn; } /** @return Avdelingen dette produktet tilhører. */ public Avdeling hentAvdeling() { return avdeling; } /** @return Antall anmeldelser dette produktet har fÃ¥tt. */ public int hentAntallAnmeldelser() { return antallAnmeldelser; } /** * @param indeks Anmeldelsen angitt ved indeks skal returneres. * @return anmeldelsen angitt ved indeks, null dersom indeks er ulovlig. */ public Anmeldelse hentAnmeldelse(int indeks) { // Skriv kode for denne metoden Anmeldelse anmeldelse = null; if (0 <= indeks && indeks <= antallAnmeldelser) anmeldelse = anmeldelser [indeks]; return anmeldelse; } /** Finner indeks til angitt anmeldelse i tabellen over anmeldelser. * @param anmeldelse Metoden finner indeks til denne anmeldelsen. * @return indeks til angitt anmeldelse dersom den finnes, -1 ellers. */ public int finnAnmeldelseIndeks(Anmeldelse anmeldelse) { return HjelpeKlasse.finnNøkkel(anmeldelser, antallAnmeldelser, anmeldelse); } /** Innsetter angitt anmeldelse for dette produktet. * @param anmeldelse Anmeldelsen som skal settes inn. * @return true dersom anmeldelsen ble innsatt, false ellers. */ public boolean innsettAnmeldelse(Anmeldelse anmeldelse) { boolean ok = antallAnmeldelser < MAKS_ANTALL_ANMELDELSER && anmeldelse != null; if (ok) anmeldelser[antallAnmeldelser++] = anmeldelse; return ok; } /** @return Totalt antall nyttige stemmer som har blitt gitt til * anmeldelsene for dette produktet. */ public int beregnTotaltAntallNyttigeStemmer() { int antall = 0; for (int i = 0; i < antallAnmeldelser; ++i) { antall += anmeldelser[i].hentAntallNyttige(); } return antall; } /** * @return Totalt antall ikke-nyttige stemmer som har blitt gitt til * anmeldelsene for dette produktet. */ public int beregnTotaltAntallIkkeNyttigeStemmer() { int antall = 0; for (int i = 0; i < antallAnmeldelser; ++i) { antall += anmeldelser [i].hentAntallIkkeNyttige(); } return antall; } /** * @return Gjennomsnitt antall stjerner tildelt dette produktet, * avrundes til nærmeste heltall. */ public int beregnGjennomsnittAntallStjerner() { // Skriv kode for denne metoden gjennomsnitt = antallStjerner / antallAnmeldelser; } return gjennomsnitt; } * Lager en hyppighetstabell over antall stjerner-hyppighet til anmeldelser, * d.v.s. antall anmeldelser som fik k 0, 1, 2, o.s.v. stjerner. * @return tabell med antall stjerner-hyppigheter */ public int[] lagAntallStjernerHyppighetsTab() { // Skriv kode for denne metoden } /* * Skriver histogram over antall stjerner-hyppighet til anmeldelser. * d.v.s. antall anmeldelser som fikk 5, 4, 3 o.s.v. stjerner. * Eksempel pÃ¥ histogram nedenfor viser at 1 anmeldelse til dette produktet * fikk 5 stjerner, 2 anmeldelser til dette produktet fikk 4 stjerner, og * 2 anmeldelser til dette produktet fikk 3 stjerner: Stjerner: Antall anmeldelser 5: + (1) 4: ++ (2) 3: ++ (2) 2: (0) 1: (0) 0: (0) */ public void skrivHistogram() { //skrive kode for denne metoden... } /** Sammenligner to produkter for likhet. * To produkter er like dersom de har samme navn og tilhører samme avdeling. * @param obj det andre produktet som dette objektet skal sammenlignes med. * @return true dersom de to produktene er like, false ellers. */ public boolean equals(Object obj) { if (this == obj) { return true; } if (!(obj instanceof Produkt)) { return false; } Produkt produkt = (Produkt)obj; return this.prodNavn.equals(produkt.prodNavn) && this.avdeling.equals(produkt.avdeling); } /** @return Strengrepresentasjon av dette produktet pÃ¥ følgende format: * <produkt navn> har <antall anmeldelser> anmeldelser: * <streng med gjennomsnitt antall '*'> * (Totalt antall nyttige: <totalt antall nyttige>, * Totalt antall ikke-nyttige: <totalt antall ikke-nyttige>). * Eksempel: Java pÃ¥ 5 min. har 2 anmeldelser: ** * (Totalt antall nyttige: 6, Totalt antall ikke nyttige: 10) */ public String toString() { return String.format("%s har %d anmeldelse(r): %-5s%n" + " (Totalt antall nyttige: %d, Totalt antall ikke-nyttige: %d)", this.prodNavn, this.antallAnmeldelser, HjelpeKlasse.fyllStreng(this.beregnGjennomsnittAntallStjerner(), '*'), this.beregnTotaltAntallNyttigeStemmer(), this.beregnTotaltAntallIkkeNyttigeStemmer()); } } Endret 23. mars 2011 av 13375k1133z Lenke til kommentar
srbz Skrevet 24. mars 2011 Del Skrevet 24. mars 2011 (endret) I dette tilfellet er det bare en begrensning i programmet mer eller mindre. Du har også en constructor som kan sette InitialCapacity som parameter. På ArrayList mener du? Jeg er helt enig i at ArrayList er bedre/enklere å bruke skal du ha en større, gjerne dynamisk liste, men et vanlig array går helt fint her. Ser ingen grunn til å velge ArrayList<Integer> over int[] i dette tilfellet, det ville bare blitt mer å skrive Skal se om jeg får tid til å se over all koden etter jobb i kveld. Skal ikke se bort ifra at jeg likevel kommer til å anbefale en ArrayList etterhvert, men det blir isåfall trolig heller for å kunne iterere over produkter/anmeldelser. Endret 24. mars 2011 av srbz Lenke til kommentar
13375k1133z Skrevet 24. mars 2011 Forfatter Del Skrevet 24. mars 2011 I dette tilfellet er det bare en begrensning i programmet mer eller mindre. Du har også en constructor som kan sette InitialCapacity som parameter. På ArrayList mener du? Jeg er helt enig i at ArrayList er bedre/enklere å bruke skal du ha en større, gjerne dynamisk liste, men et vanlig array går helt fint her. Ser ingen grunn til å velge ArrayList<Integer> over int[] i dette tilfellet, det ville bare blitt mer å skrive Skal se om jeg får tid til å se over all koden etter jobb i kveld. Skal ikke se bort ifra at jeg likevel kommer til å anbefale en ArrayList etterhvert, men det blir isåfall trolig heller for å kunne iterere over produkter/anmeldelser. Hadde vært fantastisk! Lenke til kommentar
srbz Skrevet 24. mars 2011 Del Skrevet 24. mars 2011 (endret) Kommentarer til klassen Avdeling (og enkelte tidligere klasser du har lagt ut forsåvidt) Du kan ikke bare "finne på" variabelnavn underveis, uten å initiere dem først. Generelt må du alltid fortelle java hva slags datatype en variabel er for noe, før du kan ta den i bruk. På linje 27 i Avdeling.java har du skrevet "return this.anmeldelser;". "anmeldelser" er ikke en variabel som forekommer noe annet sted i denne klassen, derfor vet ikke java hva "anmeldelser" er for noe. Samme på linje 55, her forsøker du å kalle variabelen "maksAntallProdukter", uten at du har noen variabel noe annet sted kalt "maksAntallProdukter". I tillegg ser det ut til at du mangler en klasse kalt "HjelpeKlasse". Denne refereres det til flere steder i koden, og jeg får feilmelding hvert sted denne klassen står nevnt. Se forøvrig pm jeg har sendt deg ang. SVN. Jeg glemte å nevne noe tidligere ang. Produkt.java: I metoden beregnGjennomsnittAntallStjerner() forsøker du å returnere en variabel kalt "gjennomsnitt". For det første er ikke denne variabelen initiert. Siden det er en int du skal returnere, bør variabelen "gjennomsnitt" være en int. Derfor burde det stått "int gjennomsnitt = antallStjerner / antallAnmeldelser;" inni denne metoden. For det andre trenger du ikke denne variabelen i det hele tatt. Du kan isteden bare skrive "return antallStjerner / antallAnmeldelser;" "return <datatype>;" vil returnere <datatype> Dersom du returnerer variabelen "gjennomsnitt", som i så tilfelle er en int, så returneres en int som har samme verdi som "gjennomsnitt". "return 10;" vil returnere 10. Siden uttrykket "antallStjerner / antallAnmeldelser" er en int (forutsatt at du faktisk hadde initiert begge variablene som int), kan du altså godt bare returnere dette uttrykket uten å måtte bruke en "hjelpevariabel". For det tredje står "return gjennomsnitt;" utenfor blokktegnene {} til metoden, altså får du feilmelding her også. Skal du returnere noe, må det gjøres innenfor blokktegnene. Endret 24. mars 2011 av srbz Lenke til kommentar
13375k1133z Skrevet 25. mars 2011 Forfatter Del Skrevet 25. mars 2011 (endret) Takker for tilbakemelding. Svn virker genialt, har sendt en mail til IT på UIB, så satser på at de får det fikset asap. Har komt litt lengre takket være deg, men sliter fortsatt litt. Metoden som skal skrive ut hyppighetstabell/frekvenstabell virker som har feil ett eller annet sted, da jeg får feilmelding, på linjen metoden begynner. Feilmeldingen er som følger : Exception in thread "main" java.lang.NullPointerException at produkt.java:62) Er det noe feil med denne metoden: ? public int[] lagAntallStjernerHyppighetsTab() { // TODO: Skriv kode for denne metoden int[] hyppighetsTabell = new int[5]; for (int i = 0; i <= antallAnmeldelser; i++) { hyppighetsTabell [antallStjerner] } return hyppighetsTabell; } Så får jeg feilmelding som følger: The method beregnGjennomsnittAntallStjerner(int) in the type Produkt is not applicable for the arguments (). Dette antar jeg er pga metoden som er postet under, siden antallStjerner blir returnert til den: public int beregnGjennomsnittAntallStjerner(int antallStjerner) { int gjennomsnitt = Math.round(antallStjerner / antallAnmeldelser); return gjennomsnitt; } Siden det ikke går an å gjøre det på denne måten, antar jeg at jeg må ha en eller annen form for løkke for å finne antallStjerner og anmeldelser. Men hvordan skriver jeg en slik løkke ? Endret 25. mars 2011 av 13375k1133z Lenke til kommentar
srbz Skrevet 25. mars 2011 Del Skrevet 25. mars 2011 (endret) Vel, som jeg allerede har nevnt en drøss med ganger: du er nødt å initiere variablene før du bruker dem. Jeg regner med variablen "antallStjerner" er noe du har brukt for ihvertfall i hele klassen Produkt. Da må du ha det som en feltvariabel, altså utenfor klassen, fortrinnsvis oppe sammen med variablene prodNavn, avdeling, anmeldelser og antallAnmeldelser. Hvis du ikke har denne som en feltvariabel kan den heller ikke brukes på tvers av metoder etc. Du må selvsagt også endre verdien på denne andre steder i koden for at den i det hele tatt skal ha en funksjon, noe jeg foreløpig ikke har sett noe sted at du gjør. Du vil få feilmelding alle steder i koden der du prøver å bruke en variabel systemet ikke kjenner til fra før. Sannsynligvis er det pga. dette du får en nullpointerexception. Er det noe feil med denne metoden: ? public int[] lagAntallStjernerHyppighetsTab() { // TODO: Skriv kode for denne metoden int[] hyppighetsTabell = new int[5]; for (int i = 0; i <= antallAnmeldelser; i++) { hyppighetsTabell [antallStjerner] } return hyppighetsTabell; } Ja. Jeg antar det du forsøker å gjøre inni for-løkken er å legge variabelen antallStjerner til tabellen hyppighetsTabell. For det første er antallStjerner en int (rent bortsett fra at du ikke har initiert den, men måten du behandler den på andre steder i koden tilsier at den skal være en int). Hvis du har en tabell av størrelse i, og du vil legge en int til hver av plassene i tabellen med størrelse i, vil samtlige plasser i tabellen få samme verdi. Se kodefragmenteksempelet under: int size = 10; String phoneNumber = "98765432"; String[] phoneBook = new String[size]; for(int i=0; i<size; i++){ phoneBook[i] = phoneNumber; } Det som her vil skje, er at det opprettes en tabell som tar argumenter av datatypen String. Tabellen er ment å være en telefonliste, der man legger til telefonnummer. Det er ingenting feil med koden rent kodemessig, men den er jo ikke veldig funksjonell, da den kun legger til samme telefonnummer 10 ganger. legger du til følgende kode (for utskrift): for(int i=0; i<size; i++){ System.out.println(phoneBook[i]); } samt lager en tom klasse, oppretter en main-metode, og legger all denne koden inn i main-metoden, vil utskriften bli slik: 9876543298765432 98765432 98765432 98765432 98765432 98765432 98765432 98765432 98765432 Så lenge du ikke har gjort noen endringer i det som legges til tabellen siden forrige gang du la samme variabel til tabellen, vil det være samme verdi som legges til tabellen denne gang som sist. Her har jeg bare fylt tabellen med den samme strengen 10 ganger. men du har altså også syntaksfeil der du forsøker å legge til i tabellen. For å legge til en en tabell/array, gjør du slik: array[index] = newEntry; array = navn på tabellen index = plass i tabellen newEntry = det du skal legge til tabellen (må selvsagt samsvare med datatypen du har satt tabellen til å ta) Så får jeg feilmelding som følger: The method beregnGjennomsnittAntallStjerner(int) in the type Produkt is not applicable for the arguments (). Dette antar jeg er pga metoden som er postet under, siden antallStjerner blir returnert til den: public int beregnGjennomsnittAntallStjerner(int antallStjerner) { int gjennomsnitt = Math.round(antallStjerner / antallAnmeldelser); return gjennomsnitt; } Siden det ikke går an å gjøre det på denne måten, antar jeg at jeg må ha en eller annen form for løkke for å finne antallStjerner og anmeldelser. Men hvordan skriver jeg en slik løkke ? Igjen, du må initiere antallStjerner, hvis du ikke allerede har gjort det. Men du vil trolig få en feilmelding til her. Math.round(int heltall) vil, såvidt jeg vet, returnere en verdi av type double du kan ikke uten videre si at int a = double b, men derimot kan du caste en double til en int på denne måten: int a = (int) double b ...tror jeg? I koden din skal det ihvertfall fungere med int gjennomsnitt = (int) Math.round(antallStjerner / antallAnmeldelser); isteden. Eller, som jeg har forsøkt å forfekte tidligere, rett og slett: public int beregnGjennomsnittAntallStjerner(int antallStjerner) { return (int) Math.round(antallStjerner / antallAnmeldelser); } Igjen under forutsetning at alle variabler er initiert. edit: Dang, sorry. Jeg legger først nå merke til at du har fått inn en "int antallStjerner" som parameter til metoden her. Da skyldes nok feilmeldingen det jeg nevnte over, altså at du ikke uten videre kan "transformere" double til int. Uten å caste altså, slik jeg har vist i eksempelet. Forøvrig: Dette er noe Eclipse vil informere deg om. Du vil få små ikoner i margen på samme linje som feilen befinner seg, og trykker du på disse ikonene vil du som regel få opp et eller flere løsningsforslag. Du kan også trykke disse løsningsforslagene, så vil Eclipse mer eller mindre utføre det for deg. Endret 25. mars 2011 av srbz Lenke til kommentar
13375k1133z Skrevet 28. mars 2011 Forfatter Del Skrevet 28. mars 2011 Takker nok en gang for tilbakemelding. Forstår no at jeg ikke kan skrive opp variabler helt uten videre, sålenge de er i en annen klasse. Så de variablene som får feilmelding om at de ikke er initialisert er i en annen klasse. Hvordan får jeg tilgang på f.eks variabelen : antallStjerner i Anmeldelse? setter jeg den som public int, eller public static int, får jeg feilmeldinger. Det jeg har hørt jeg kan gjøre er å kjøre en for - løkke for å hente verdiene fra toString, eller konstruktør? (mulig at variablene blir hentet fra annet sted) men hvordan gjøres dette? ___________________________________________________________________________________ Det er det samme problemet jeg har i metoden : finnTotaltAntallAnmeldelser i klasse Avdeling. Trodde jeg bare kunne skrive: return antallIkkeNyttige + antallNyttige, men kan jo ikke gjøre dette, når variablene er i en annen klasse. Prøvde derfor å lage en løkke, uten hell for å løse problemet. public int finnTotaltAntallAnmeldelser() { int count++; for(String antallNyttige / Anmeldelse.antallIkkeNyttige) { count++; } int antall = count; } men dette gikk ikke, hva er galt i koden ? Takker på forhånd for hjelp! Lenke til kommentar
srbz Skrevet 28. mars 2011 Del Skrevet 28. mars 2011 (endret) for-løkken din tar ikke et gyldig argument i parameter. Mer om for-loop her. Merk at det er to gyldige syntakser for slike løkker, eksemplifisert ved eks. 1: class ForDemo { public static void main(String[] args){ for(int i=1; i<11; i++){ System.out.println("Count is: " + i); } } } og eks. 2: class EnhancedForDemo { public static void main(String[] args){ int[] numbers = {1,2,3,4,5,6,7,8,9,10}; for (int item : numbers) { System.out.println("Count is: " + item); } } } Eks. 1 oppretter et indekstall (i), gir et kriterie som må være tilfredsstilt for at løkken skal iterere en gang til (som en while-løkke), og inkrementerer til slutt indekstallet. Eks. 1 vil altså også være "ekvivalent" med følgende kode: class WhileInsteadOfFor { public static void main(String[] args){ int i=1; while(i<11){ System.out.println("Count is: " + i); i++; } } } Denne vil, i likhet med eks. 1, først initiere variablene i=1, deretter vil den - så lenge i er ekte mindre enn 11 - skrive ut strengen "Count is: " + i Deretter vil den inkrementere (øke) i med 1, før den til slutt sjekker om kriteriet for at løkken skal kjøres på ny er oppfylt. Legg spesielt merke til at uttrykket i++ må komme etter utskriften for at koden skal være ekvivalent med eks. 1. Jeg anbefaler ikke å bruke en while-løkke istedenfor en for-løkke i slike tilfeller, jeg bare påpeker at det er mulig. I eks. 2 bruker man for-løkken for å iterere over en liste. Det kan være en vanlig array/tabell, men også en ArrayList eller lignende såvidt jeg husker. Så hvorfor fungerer ikke koden din? public int finnTotaltAntallAnmeldelser() { int count++; for(String antallNyttige / Anmeldelse.antallIkkeNyttige) { count++; } int antall = count; } Argumentet "String antallNyttige / Anmeldelse.antallIkkeNyttige" er som sagt ikke gyldig parameter for en slik løkke. Her forsøker du faktisk å dele en streng på en int, enda strengvariabelen allerede er en int. Strengt tatt trenger du ikke noen for-løkke her i det hele tatt, siden du har begge disse variablene som int fra før, og variabelen du er på jakt etter er en int som er summen av disse to. Det som imidlertid er viktig å huske på er at disse er private feltvariabler i klassen Anmeldelse. Det at en variabel/metode/whatever er privat, betyr at du ikke kan nå dem fra andre klasser. Derfor kan du bruke en public hjelpemetode for å få tak i dette i andre klasser isteden, eksempelvis: public int finnTotaltAntallAnmeldelser() { return antallNyttige + antallIkkeNyttige; } men denne metoden må da ligge i klassen som inneholder de private feltvariablene, altså Anmeldelse.java. Er det en innlevering du holder på med? Når skal den inn isåfall? Endret 28. mars 2011 av srbz Lenke til kommentar
13375k1133z Skrevet 28. mars 2011 Forfatter Del Skrevet 28. mars 2011 Takker igjen for hjelp. Dette er en semesteroppgave som skal leveres i morgen faktisk. gode eksempler du viser, skal ta en kikk paa dem naar jeg kommer hjem, haaper at jeg klarer aa lage loopen som behoeves. Hvordan jager jeg forresten du histogram? Lenke til kommentar
srbz Skrevet 28. mars 2011 Del Skrevet 28. mars 2011 (endret) Du bør bruke en dobbel for-løkke ihvertfall, noe ala for(int i=5; i>=0; i--){ System.out.print("Karakter "+i+": "); for(int j=0; j<antallForekomsterAvKarakterI; j++){ System.out.print("+"); } System.out.println(" ("+antallForekomsterAvKarakterI+")"); } Der variabelen antallForekomsterAvKarakterI er en variabel som gir deg nettopp dette antallet for hver av karakterene 0-5, noe du gjerne kan ha i en egen tabell (og bytte ut denne variabelen med passende referanse til tabellen). edit: Jeg har tenkt feil her, jeg har ikke tenkt over at dette gjelder per produkt, og ikke på tvers av produkter. Tabellen jeg refererer til skal du jo forøvrig også ha fra før, det er lagAntallStjernerHyppighetsTab(). for(int i=Anmeldelse.MAKS_ANTALL_STJERNER; i>=0; i--){ System.out.print("Karakter "+i+": "); for(int j=0; j<lagAntallStjernerHyppighetsTab[i]; j++){ System.out.print("+"); } System.out.println(" ("+lagAntallStjernerHyppighetsTab[i]+")"); } Ser forøvrig også ut som om utskriften skal formateres slik at den blir justert ("pen"). Da bør du heller legge "+" til en streng, som du så skriver ut med System.out.printf(). Endret 28. mars 2011 av srbz 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å