/** 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) {
//skriv kode for denne metoden
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() {
// Skriv kode for denne metoden
return antallNyttige + antallIkkeNyttige;
}
/** @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) {
//skriv kode for denne metoden
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 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) {
// Skriv kode for denne metoden??
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() {
// Skriv kode for denne metoden ??
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 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);
}
}
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;
}
public int beregnGjennomsnittAntallStjerner(int antallStjerner) {
int gjennomsnitt = Math.round(antallStjerner / antallAnmeldelser);
return gjennomsnitt;
}
hyppighetsTabell [antallStjerner]
hyppighetsTabell[i] = antallStjerner;
int[] hyppighetsTabell = new int[antallAnmeldelser];
/** 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) {
// TODO: 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() {
// TODO: Skriv kode for denne metoden
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(int antallStjerner) {
// TODO: Skriv kode for denne metoden
int gjennomsnitt = Math.round(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() {
// TODO: Skriv kode for denne metoden
int[] hyppighetsTabell = new int[5];
for (int i = 0; i <= antallAnmeldelser; i++) {
hyppighetsTabell[i] = antallStjerner;
}
return hyppighetsTabell;
}
/**
* 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() {
// TODO: Skriv 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());
}
}
/** Klasse med nyttige metoder. */
public class HjelpeKlasse {
/** Fyller en streng med et gitt tegn.
* @param antallTegn Angir hvor mange tegn som skal være i strengen
* @param tegn Angir tegn som strengen skal fylles med
* @return streng fylt med angitt tegnet visst antall ganger. */
public static String fyllStreng(int antallTegn, char tegn) {
String fylleMed = Character.toString(tegn);
String stjStr = "";
for (int i = 0; i < antallTegn; ++i) {
stjStr += fylleMed;
}
return stjStr;
}
/** Lineær søking etter en nøkkel.
* @param tab Tabellen det skal søkes i
* @param antall Antall elementer i tabellen
* @param nøkkel Verdi det skal søkes etter i tabellen
* @return indeks i tabellen der nøkkel ble funnet, ellers -1. */
public static int finnNøkkel(Object[] tab, int antall, Object nøkkel){
int indeks = -1;
for (int i = 0; i < antall; ++i) {
if(tab[i].equals(nøkkel)) {
indeks = i;
}
}
return indeks;
}
}
Produkt.java:48: cannot find symbol
symbol : method finnøkkel(Anmeldelse[],int,Anmeldelse)
location: class HjelpeKlasse
return HjelpeKlasse.finnøkkel(anmeldelser, antallAnmeldelser, anmeldelse);
^
Produkt.java:105: cannot find symbol
symbol : variable antallStjerner
location: class Produkt
hyppighetsTabell[i] = antallStjerner;
^
Produkt.java:155: beregnGjennomsnittAntallStjerner(int) in Produkt cannot be applied to ()
HjelpeKlasse.fyllStreng(this.beregnGjennomsnittAntallStjerner(), '*'),
^
Avdeling.java:30: cannot find symbol
symbol : variable antallNyttige
location: class Avdeling
return antallNyttige + antallIkkeNyttige;
^
Avdeling.java:30: cannot find symbol
symbol : variable antallIkkeNyttige
location: class Avdeling
return antallNyttige + antallIkkeNyttige;
^
Avdeling.java:30: incompatible types
found : java.lang.String
required: int
return antallNyttige + antallIkkeNyttige;
^
Avdeling.java:58: cannot find symbol
symbol : variable maksAntallProdukter
location: class Avdeling
boolean ok = antallProdukter < maksAntallProdukter && produkt !=null;
^
7 errors
public int finnTotaltAntallAnmeldelser() {
int count++;
for(String antallNyttige : Anmeldelse.antallIkkeNyttige) {
count++;
}
int antall = count;
}
return anmeldelse
}
public int[] lagAntallStjernerHyppighetsTab() {
// TODO: Skriv kode for denne metoden
int[] hyppighetsTabell = new int[5];
for (int i = 0; i <= antallAnmeldelser; i++) {
hyppighetsTabell[i] = antallStjerner;
}
return hyppighetsTabell;
}
anmeldelse1.hentAntallStjerner()
Registrerte brukere: Ingen registrerte brukere