Gå til innhold

Grunnleggende spørsmål om klasser, strings etc.


Anbefalte innlegg

Hei sann! Jeg er nokså ny i java og hadde satt pris på en oppgave som jeg sliter med å få til.

oppgaven er som følgende:

 

 

Lag en klasse med navn Spiller som inneholder følgende instansvariabler:

private String navn

private String adresse

private int postnummer

private String poststed

Klassen Spiller skal ha metodene public void settPersonalia(), samt

hentemetodene public String hentNavn(), public String hentAdresse(),

public int hentPostnummer() og public String hentPoststed().

Metoden settPersonalia() skal be brukeren oppgi navn, adresse, postnummer og

poststed, og legge de innleste verdiene i de tilhørende variablene. Metoden trenger ikke sjekke at de innleste verdiene er av riktig type og format, du kan f.eks. anta at

brukeren alltid oppgir et firesifret heltall som postnummer.

De andre metodene skal returnere verdien som ligger i variabelen som svarer til

metodenavnet.

 

 

Klassen Spiller

Instansvariabler:

private String navn

private String adresse

private int postnummer

private String poststed

 

Instansmetoder:

public void settPersonalia()

public String hentNavn()

public String hentAdresse()

public int hentPostnummer()

public String hentPoststed()

Endret av Explozive
Lenke til kommentar
Videoannonse
Annonse

private betyr at man ikkje kan endre på denne variabelen utanfor klassen, men public betyr at den er tilgjengeleg for alle.

 

Grunnen er fordi det er ønskeleg at operasjonar utanfor klassen ikkje skal ha direkte tilgang til variabelen.

 

Om du har to variabler, birthdate og age så ynskjer du at dei skal vere konsistente.

Dermed så har du i setBirthdate() metoden følgende:

setBirthdate(Date date){
   SimpleDateFormat sf = new SimpleDateFormat("yyyy");
   Long thisYear = Long.parseLong(sf.format(new Date()));
   Long birthyear = Long.parseLong(sf.format(date));
   this.age = thisYear - birthyear;
   this.birthdate = date;
}

Som du ser så krevje det to operasjonar for at både birthdate og age skal vere konsistende. Og då er det dumt at ein kan endre på variablane direkte ;)

  • Liker 2
Lenke til kommentar

Innleveringsfristen for TS' oppgave er ute. Her har du en fiks ferdig løsning på oppgave 1:

 

public class Spiller {

/*
 * Deklarerer feltvariable. Disse variablene er private, og kan ikke kalles direkte
 * fra andre klasser. Det er det du har hent- og sett-metoder til lenger ned i kildekoden.
 */

private String navn;
private String adresse;
private int postnummer;
private String poststed;

/*
 * Metodene under er public istedenfor private. Dette innebærer at andre klasser kan
 * få tilgang til disse metodene. Klassen Spiller inneholder enn så lenge kun relevant
 * informasjon om selve spilleren, men om du senere skal ha en klasse for selve spillet,
 * der spillet er avhengig av å kunne hente eller endre spillerens personalia, kan
 * spillklassen gjøre dette ved hjelp av public-variablene.
 */

public void settPersonalia(String navn, String adresse, int postnummer, String poststed){
	/*
	 * "this" henviser til feltvariablene som allerede er deklarert.
	 * Det innebærer altså her at du setter feltvariablene til verdiene som gis
	 * i metodeparameterne.
	 */

	this.navn = navn;
	this.adresse = adresse;
	this.postnummer = postnummer;
	this.poststed = poststed;
}

public String hentNavn(){
	return navn;
}

public String hentAdresse(){
	return adresse;
}

public int hentPostnummer(){
	return postnummer;
}

public String hentPoststed(){
	return poststed;
}
}

 

 

For å utdype siDDis sin forklaring en smule:

Fordelen med å gjøre ting på denne måten er at du kan abstrahere arbeidsoppgavene, noe som kommer veldig godt med når man etterhvert lager store programmer, både for å gjøre ting oversiktlig og for å slippe svært mange linjer med kode.

 

Se for deg at du skal skrive ut et ark fra en datamaskin. Istedenfor å sitte med en penn og gjenskape hver enkelt piksel på et ark, kan du sende en kommando (ekvivalent med å kalle en metode) til printeren (ekvivalent med en annen klasse), der du forteller printeren at den skal printe noe, og hva det er den skal printe (ekvivalent med metodeparametre). Printeren gjør "et eller annet" (ekvivalent med innholdet i metoden) som du ikke trenger å bry deg med, og gir deg til slutt resultatet (det ferdig skrevne arket). Selve metoden "print følgende ark:" er public, mens interne kretser osv. i skriveren er private i den forstand at du ikke har direkte tilgang på dem.

 

For å gi et annet kodeeksempel:

public class Temperatur {

private static double konstantledd = 32;
private static double stigningstall = 9/5;

public static double konverterTilFahrenheit(double celsius){
	return konstantledd + celsius * stigningstall;
}
}

 

Her har du en klasse Temperatur som inneholder metoden konverterTilFahrenheit(). Denne metoden tar en double celsius som parameter, gjør noe med verdien (double er desimaltall i java) og returnerer et resultat (static metoder og variabler kommer du til etterhvert). Klassen Vaermelding bruker denne på følgende måte:

 

public class Vaermelding {

public static void main(String[] args) {

	double c = 20;
	double f = Temperatur.konverterTilFahrenheit(c);
	System.out.println("Temperatur i fahrenheit: " + f);
}
}

 

Utskriften gir 52.0

 

Her trenger altså ikke værmeldingsklassen å vite hvordan man konverterer celsius til fahrenheit. Det er en egen klasse med en metode som gjør dette for den. Feltvariablene til klassen Temperatur er private, slik at andre klasser ikke kan se eller endre disse, noe de foreløpig uansett ikke har bruk for. På denne måten kan du hindre at du ved en feil får en annen klasse til å endre verdiene "konstantledd" eller "stigningstall" når det ikke er meningen.

 

Feltvariablene til Temperatur burde vel egentlig vært final ettersom dette er faste verdier, men det får være en annen sak.

 

Ellers: Følg rådet til Mapster, og gå på forelesningene. Møt også opp på gruppeøvinger dersom dere har flere igjen, gruppelederne er dyktige studenter som kan hjelpe deg når du sitter fast med noe. Sett deg gjerne også på faklaben på instituttet, og jobb helst sammen med andre. Dere får fort nyttige innspill fra "eavesdroppere" i periferien om dere først diskuterer noe høylytt der ;)

Endret av srbz
  • Liker 2
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...