MadOx Skrevet 30. januar 2009 Del Skrevet 30. januar 2009 Oppgave: BlueJ kasino i Las Vegas har gitt deg i oppdrag å lage en klasse som de kan bruke for å registrerederes 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 Lenke til kommentar
sygard Skrevet 30. januar 2009 Del Skrevet 30. januar 2009 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
MadOx Skrevet 30. januar 2009 Forfatter Del Skrevet 30. januar 2009 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
Nuduaa Skrevet 30. januar 2009 Del Skrevet 30. januar 2009 Nja fremdeles feil i constructorn, du må sette verdiene som constructorn gir, som sygard sa. public Player(String firstname, String lastname, int credits) { this.firstname = firstname; this.lastname = lastname; this.credits = credits; } Lenke til kommentar
MadOx Skrevet 30. januar 2009 Forfatter Del Skrevet 30. januar 2009 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
Cyberfrog Skrevet 30. januar 2009 Del Skrevet 30. januar 2009 (endret) 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; } Endret 30. januar 2009 av Cyberfrog Lenke til kommentar
Nuduaa Skrevet 30. januar 2009 Del Skrevet 30. januar 2009 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. Lenke til kommentar
MadOx Skrevet 31. januar 2009 Forfatter Del Skrevet 31. januar 2009 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
x871kx6167ss7 Skrevet 31. januar 2009 Del Skrevet 31. januar 2009 Jeg følte meg veldig hjelpson i dag, og har laget dette bildet du kan skrive ut og bruke når du gjør lekser og sånt. Lenke til kommentar
MadOx Skrevet 31. januar 2009 Forfatter Del Skrevet 31. januar 2009 Men hva om jeg ikke klarer å lage et testprogram da? Jeg er helt nybegynner med Java, så det er derfor jeg spør! Lenke til kommentar
x871kx6167ss7 Skrevet 31. januar 2009 Del Skrevet 31. januar 2009 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
atsjoo Skrevet 1. februar 2009 Del Skrevet 1. februar 2009 (endret) 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 1. februar 2009 av atsjoo Lenke til kommentar
Gordion Skrevet 9. februar 2009 Del Skrevet 9. februar 2009 (endret) 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 9. februar 2009 av Gordion Lenke til kommentar
steingrim Skrevet 10. februar 2009 Del Skrevet 10. februar 2009 - Ville brukt boolean der du bruker void (sett fornavn og etternavn) Hva mener du egentlig med dette? Dårlig med kommentarer i programmeringen din forresten, man bør ha litt kommentarer innimellom Kommentar for kommentarens skyld er bare tull Lenke til kommentar
blackbrrd Skrevet 10. februar 2009 Del Skrevet 10. februar 2009 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. Lenke til kommentar
NevroMance Skrevet 10. februar 2009 Del Skrevet 10. februar 2009 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
blackbrrd Skrevet 10. februar 2009 Del Skrevet 10. februar 2009 Hvordan ville du ha skrevet disse to metodene da: public void setName(String firstname, String lastname) { this.firstname = firstname; this.lastname = lastname; } public void setFirstname(String firstname) { this.firstname = firstname; } Lenke til kommentar
NevroMance Skrevet 10. februar 2009 Del Skrevet 10. februar 2009 (endret) 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 10. februar 2009 av NevroMance Lenke til kommentar
Cyberfrog Skrevet 11. februar 2009 Del Skrevet 11. februar 2009 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
blackbrrd Skrevet 11. februar 2009 Del Skrevet 11. februar 2009 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
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å