Gå til innhold

Kan noen sjekke om denne Java-koden er korrekt i forhold til oppgaven min?


Anbefalte innlegg

Oppgave:

BlueJ kasino i Las Vegas har gitt deg i oppdrag å lage en klasse som de kan bruke for å registrere

deres spillere. Siden dette er et internasjonalt selskap skal alle klassenavn, variabler og metoder

navngis på engelsk.

Du skal opprette et nytt prosjekt og skrive klassen Player. Hensikten med oppgaven er at

informasjon om en spiller kapsles inn i et beskyttende objekt og at den dermed ikke kan endres

vilkårlig.

Klassen Player skal derfor inneholde de private feltene firstname, lastname og

credits.

De offentlige metodene som Player definerer gjør følgende:

. setFirstname: Setter fornavnet til en spiller

. getFirstname: Returnerer fornavnet.

. setLastname: Setter etternavnet til en spiller

. getLastname: Returnerer etternavnet.

. addCredits: Øker spillerens pengesum med angitt beløp

. getCredits: Returnerer spillerens pengesum

. validPlayer: Undersøker, ved hjelp av en if-setning, om spillerens pengesum er

større enn 0. Vil returnere true dersom den er det, og false dersom ikke

. print: Skriver ut informasjonen om spilleren til terminalvinduet (ved hjelp av

System.out.println)

I tillegg skal klassen Player ha en konstruktør som tar inn 2 argumenter/aktuelle parameter for

å initialisere Player-objektet:

o En tekststreng som representerer spillerens fornavn

o Et tekststreng som representerer spillerens etternavn

o I tillegg skal konstruktøren sette spillerens pengebeløp (credits) til 100

Kode:
public class Player {

public Player() {
   private String firstname = "";
   private String lastname = "";
   private int credits = 100;
}

public void setFirstname(String name) {
	firstname = name;
}

public String getFirstname() {
	return firstname;
}

public void setLastname(String name) {
	lastname = name;
}

public String getLastname() {
	return lastname;
}

public void addCredits(int amount) {
	credits = credits + amount;
}

public int getCredits() {
	return credits;
}

public boolean validPlayer() {
	if(getCredits() > 0){
		return true;
	} else {
		return false;
	}
}

public void print() {
	System.out.println("PLAYER INFORMATION:");
	System.out.println("First name: " + getFirstname());
	System.out.println("Last name: " + getLastname());
	System.out.println("Credit: " + getCredit());
	System.out.println("-------------------");
}
}

Takk så mye for all hjelp :D

Lenke til kommentar
Videoannonse
Annonse

Det ser bra ut, men du mangler riktig konstruktør.

 

Player(String firstname, String lastname){}

burde det være.

 

Ellers har du en skrivefeil, i print() har du getCredit(), ikke getCredits().

 

Du prøver også i lage objektvariabelene i konstruktøren, dette vil ikke fungere. Du må deklarere de først, også sette en verdi til de i konstruktøren, eks:

 public class A {
private int startVal;
public A(int startVal){
   this.startVal = startVal;
}
...
...
}

Lenke til kommentar

Takk for hjelpen!

 

Blir dette bra da?

public class Player {
private String firstname;
private String lastname;
private int credits;

public Player(String firstname, String lastname, int credits) {
   this.firstname = "";
   this.lastname = "";
   this.credits = 100;
}

public void setFirstname(String name) {
	firstname = name;
}

public String getFirstname() {
	return firstname;
}

public void setLastname(String name) {
	lastname = name;
}

public String getLastname() {
	return lastname;
}

public void addCredits(int amount) {
	credits = credits + amount;
}

public int getCredits() {
	return credits;
}

public boolean validPlayer() {
	if(getCredits() > 0){
		return true;
	} else {
		return false;
	}
}

public void print() {
	System.out.println("PLAYER INFORMATION:");
	System.out.println("First name: " + getFirstname());
	System.out.println("Last name: " + getLastname());
	System.out.println("Credit: " + getCredits());
	System.out.println("-------------------");
}
}

Lenke til kommentar

Så dette er riktig?

public class Player {
private String firstname;
private String lastname;
private int credits;

public Player(String firstname, String lastname, int credits) {
   this.firstname;
   this.lastname;
   this.credits;
}

public void setFirstname(String name) {
	firstname = name;
}

public String getFirstname() {
	return firstname;
}

public void setLastname(String name) {
	lastname = name;
}

public String getLastname() {
	return lastname;
}

public void addCredits(int amount) {
	credits = credits + amount;
}

public int getCredits() {
	return credits;
}

public boolean validPlayer() {
	if(getCredits() > 0){
		return true;
	} else {
		return false;
	}
}

public void print() {
	System.out.println("PLAYER INFORMATION:");
	System.out.println("First name: " + getFirstname());
	System.out.println("Last name: " + getLastname());
	System.out.println("Credit: " + getCredits());
	System.out.println("-------------------");
}
}

Lenke til kommentar
Det er ikke galt syntaktisk sett, men det blir vel galt iht. oppgaven, som sier at credits skal settes til hundre i konstruktøren?

 

	public Player(String firstname, String lastname) {
   this.firstname = firstname;
   this.lastname = lastname;
   credits = 100;
}

Sant, skumleste igjennom oppgaven. :blush:

Lenke til kommentar

Så dette er riktig, da? :)

Takk for hjelpen!

 

Blir dette bra da?

public class Player {
private String firstname;
private String lastname;
private int credits;

public Player(String firstname, String lastname, int credits) {
   this.firstname = "";
   this.lastname = "";
   this.credits = 100;
}

public void setFirstname(String name) {
	firstname = name;
}

public String getFirstname() {
	return firstname;
}

public void setLastname(String name) {
	lastname = name;
}

public String getLastname() {
	return lastname;
}

public void addCredits(int amount) {
	credits = credits + amount;
}

public int getCredits() {
	return credits;
}

public boolean validPlayer() {
	if(getCredits() > 0){
		return true;
	} else {
		return false;
	}
}

public void print() {
	System.out.println("PLAYER INFORMATION:");
	System.out.println("First name: " + getFirstname());
	System.out.println("Last name: " + getLastname());
	System.out.println("Credit: " + getCredits());
	System.out.println("-------------------");
}
}

Lenke til kommentar

Det er ikke så mye som skal til for å skjekke om dette programmet fungerer. Lag en main-metode i Person-klassen din.

 

Opprett et personobjekt: Person person = new Person("Ivar", "Aasen");

Be personobjektet om å skrive ut informasjonen.

Prøv å endre fornavn, etternavn og poengsum.

Be personobjektet om å skrive ut informasjonen.

Sett poengsumen i minus, og skjekk om validPlayer() returnerer false.

Lenke til kommentar

Du setter fremdeles ikke objektvariablene firstname og lastname til det du sender inn i konstruktøren når du initierer objektet:

 

public Player(String firstname, String lastname) {
this.firstname = firstname;
this.lastname = lastname;
}

 

Når du gjør dette, fungerer nok klassen din som tiltenkt.

 

Forøvrig bør du alltid gjøre som Blackslash foreslår - lag testprogram som verifiserer at programmet ditt fungerer.

Endret av atsjoo
Lenke til kommentar
  • 2 uker senere...

Vet ikke hvor lang du har kommet i pensum, men:

- Ville brukt boolean der du bruker void (sett fornavn og etternavn)

- Bruk trim på etternavn og fornavn

 

Edit:

 

Dårlig med kommentarer i programmeringen din forresten, man bør ha litt kommentarer innimellom ;)

 

Lag et enkelt testprogram med JOPtionPane

Endret av Gordion
Lenke til kommentar
Du har skrevet:

public void setFirstname(String name) {
firstname = name;
}

 

Det er vanlig å skrive det slik i java:

public void setFirstname(String firstname) {
this.firstname = firstname;
}

 

Det er klarere hva variabelen kommer til å bli brukt til på denne måten.

 

Dette er jeg uenig i. Det er en del som gjør det, ja, men det vil ikke automatisk si at det er den beste måten, eller den mest "javaiske" måten å gjøre det på. Ditt argument om at det er klarere hva variabelen kommer til å bli brukt til ser jeg heller ikke, spesielt ikke i dette tilfellet hvor det eneste som skjer er at han setter firstname = name. Sier seg ganske selv ut ifra variabelnavnet firstname.

 

Selv liker jeg å kalle parameterne noe annet enn hva klassevariablene heter, da det er lettere å forhold seg til i større metoder hvis du faktisk skal bruke parameteren til noe. Men vanlig for meg er å la klassevariable ha prefikset m_ for å skille de fra andre variable.

Lenke til kommentar

Jeg ville hatt klassevariablene

 

private String m_firstname;
private String m_lastname;

 

og så hatt:

 

public void setName(String first, String last) {
m_firstname = first;
m_lastname = last;
}

public void setFirstName(String firstname) {
m_firstname = firstname;
}

 

Da setName impliserer at jeg skal sette et navn er det ikke nødvendig med lengre navn enn first/last, selv om du selvsagt kan bruke firstname og lastname hvis du liker det bedre. Men selv liker jeg klassevariabler som starter med m_ da en vet at alt som ikke starter med m_ ikke er definert i hele klassen.

 

EDIT: Må forresten presisere at dette langt ifra er den eneste måten å gjøre det på. Dette er måten jeg foretrekker å gjøre det på, men jeg har aldri påstått at det er måten det skal gjøres på.

Endret av NevroMance
Lenke til kommentar

Har ikke inntrykk av at "m_"-prefikset er en vanlig code convention for javakode. Selvfølgelig kan man likevel argumentere for at det er hensiktsmessig.

 

Min egen "huskeregel" er at variabelnavn skal være slik at man kan se hva de skal brukes til, uten å måtte lese kommentarer. For meg er det derfor i dette konkrete tilfellet likegyldig om man bruker this.firstname = firstname eller firstname = name (eller noe annet fornuftig).

 

Ikke fornuftig:

/** Sets first name */
public void setFn(String n) {
fn = n;
}

 

 

http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html

Lenke til kommentar
Jeg ville hatt klassevariablene

 

private String m_firstname;
private String m_lastname;

 

og så hatt:

 

public void setName(String first, String last) {
m_firstname = first;
m_lastname = last;
}

public void setFirstName(String firstname) {
m_firstname = firstname;
}

Her har du altså i samme klasse 3 forskjellige "navn" på fornavn:

m_firstname

firstname

first

 

Ikke så veldig konsekvent...

 

Min mening er at jo færre variabelnavn man må finne på/må bruke jo enklere blir koden å lese...

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...