Whiskey^ Skrevet 15. september 2015 Del Skrevet 15. september 2015 Hei og god kveld folkens! Er det noen her som kan forklare meg hvorfor s.o (punkt (1)) printer "(0.0m , 0.0)" selvom jeg trykker inn en annen verdi? jeg tror det mest sannsynlig er koden markert med oransje som roter det til på et eller annet vis men jeg står bom fast. Koden: ------------------------------------------------------------ import java.util.Scanner; class Person{ //--- Feltvariabler String navnPerson; double xPosisjon, yPosisjon ; String hentNavn() {return navnPerson; } double hentXPosisjon() {return xPosisjon; } double hentYPosisjon() {return yPosisjon; } void settNavn(String nyttNavn) {navnPerson = nyttNavn;} void settXPosisjon(double settXPos) {xPosisjon = settXPos; } void settYPosisjon(double settYPos) {yPosisjon = settYPos; } Double xPosisjonDouble = new Double(hentXPosisjon()); String xPosisjonStreng = xPosisjonDouble.toString() + "m"; Double yPosisjonDouble = new Double(hentYPosisjon()); String yPosisjonStreng = yPosisjonDouble.toString() + "m"; } public class Oppgave2 { public static void main(String [] args) { Scanner tastatur = new Scanner(System.in); /// --- Opprette ny person Person Person1 = new Person(); System.out.println("Skriv inn navn: "); Person1.settNavn(tastatur.nextLine()); System.out.println("Skriv inn X-posisjon: "); Person1.settXPosisjon(tastatur.nextDouble()); System.out.println("Skriv inn Y-posisjon: "); Person1.settYPosisjon(tastatur.nextDouble()); System.out.printf(Person1.hentNavn() + ": (%s , %s)", // (1) Person1.xPosisjonStreng, Person1.yPosisjonStreng); } } ----------------------------------------------------------------------------- Lenke til kommentar
Gavekort Skrevet 15. september 2015 Del Skrevet 15. september 2015 (endret) Du gjør det vanskelig for deg selv: package Oppgave2; import java.util.Scanner; class Person{ //--- Feltvariabler private String navnPerson; //GAVEKORTFIX (tm) private double xPosisjon, yPosisjon ; //GAVEKORTFIX (tm) String hentNavn() {return navnPerson; } double hentXPosisjon() {return xPosisjon; } double hentYPosisjon() {return yPosisjon; } //GAVEKORTFIX (tm) void settNavn(String navnPerson) {this.navnPerson = navnPerson;} void settXPosisjon(double xPosisjon) {this.xPosisjon = xPosisjon; } void settYPosisjon(double yPosisjon) {this.yPosisjon = yPosisjon; } //END GAVEKORTFIX (tm) //KAN FJERNES Double xPosisjonDouble = new Double(hentXPosisjon()); String xPosisjonStreng = xPosisjonDouble.toString() + "m"; Double yPosisjonDouble = new Double(hentYPosisjon()); String yPosisjonStreng = yPosisjonDouble.toString() + "m"; } public class Oppgave2 { public static void main(String [] args) { Scanner tastatur = new Scanner(System.in); /// --- Opprette ny person Person Person1 = new Person(); System.out.println("Skriv inn navn: "); Person1.settNavn(tastatur.nextLine()); System.out.println("Skriv inn X-posisjon: "); Person1.settXPosisjon(tastatur.nextDouble()); System.out.println("Skriv inn Y-posisjon: "); Person1.settYPosisjon(tastatur.nextDouble()); //GAVEKORTFIX (tm) System.out.printf(Person1.hentNavn() + ": (%.2fm , %.2fm)", // (1) Person1.hentXPosisjon(), Person1.hentYPosisjon()); //END GAVEKORTFIX (tm) } } Endringer er markert Endret 15. september 2015 av Gavekort Lenke til kommentar
Whiskey^ Skrevet 15. september 2015 Forfatter Del Skrevet 15. september 2015 Du gjør det vanskelig for deg selv: package Oppgave2; import java.util.Scanner; class Person{ //--- Feltvariabler private String navnPerson; //GAVEKORTFIX (tm) private double xPosisjon, yPosisjon ; //GAVEKORTFIX (tm) String hentNavn() {return navnPerson; } double hentXPosisjon() {return xPosisjon; } double hentYPosisjon() {return yPosisjon; } //GAVEKORTFIX (tm) void settNavn(String navnPerson) {this.navnPerson = navnPerson;} void settXPosisjon(double xPosisjon) {this.xPosisjon = xPosisjon; } void settYPosisjon(double yPosisjon) {this.yPosisjon = yPosisjon; } //END GAVEKORTFIX (tm) //KAN FJERNES Double xPosisjonDouble = new Double(hentXPosisjon()); String xPosisjonStreng = xPosisjonDouble.toString() + "m"; Double yPosisjonDouble = new Double(hentYPosisjon()); String yPosisjonStreng = yPosisjonDouble.toString() + "m"; } public class Oppgave2 { public static void main(String [] args) { Scanner tastatur = new Scanner(System.in); /// --- Opprette ny person Person Person1 = new Person(); System.out.println("Skriv inn navn: "); Person1.settNavn(tastatur.nextLine()); System.out.println("Skriv inn X-posisjon: "); Person1.settXPosisjon(tastatur.nextDouble()); System.out.println("Skriv inn Y-posisjon: "); Person1.settYPosisjon(tastatur.nextDouble()); //GAVEKORTFIX (tm) System.out.printf(Person1.hentNavn() + ": (%.2fm , %.2fm)", // (1) Person1.hentXPosisjon(), Person1.hentYPosisjon()); //END GAVEKORTFIX (tm) } } Endringer er markert takk for svar Gavekort! Grunnen til at jeg har tatt med toString er pga oppgaven sier at "etter innlesing av personenes navn og posisjoner ska programmet først skrive ut navn og posisjon for hver person ved hjelp av toString()-metoden..." har du noen tips ? Lenke til kommentar
Gavekort Skrevet 15. september 2015 Del Skrevet 15. september 2015 (endret) Hvorfor i alle dager skal du trenge å bruke toString()? Om du vil gjøre det med println så kan du heller gjøre dette: System.out.println(Person1.hentNavn() + ": (" + Person1.hentXPosisjon() + "m , " + Person1.hentYPosisjon() + "m)"); Ei heller her trenger du å caste i hytt og pine. Men om du absolutt skal caste det så ser det slik ut. System.out.println(Person1.hentNavn() + ": (" + Double.toString(Person1.hentXPosisjon()) + "m , " + Double.toString(Person1.hentYPosisjon()) + "m)"); Som forøvrig er passe døvt. Endret 15. september 2015 av Gavekort Lenke til kommentar
Whiskey^ Skrevet 15. september 2015 Forfatter Del Skrevet 15. september 2015 Takk, Gavekort Hadde det ikke vært for at oppgaven spurte om det så hadde jeg glatt hoppet over det. Lenke til kommentar
jonny Skrevet 15. september 2015 Del Skrevet 15. september 2015 (endret) Problemet med den opprinnelige koden din er at variablene "xPosisjonStreng" osv. i Person-klassen får verdier når et Person-objekt blir opprettet, dermed vil xPosisjonStreng alltid få verdien "0.0m" (da verdien av xPosisjon blir satt til 0.0 når et Person-objekt opprettes). Uten å ha sett oppgaven antar jeg at det er meningen du skal skrive en "toString()"-metode i Person-klassen, slik at du kan bruke "System.out.println(Person1);" i main-metoden (og vær så snill, ikke bruk stor bokstav først i variabelnavn...) Endret 15. september 2015 av jonny Lenke til kommentar
Whiskey^ Skrevet 16. september 2015 Forfatter Del Skrevet 16. september 2015 Problemet med den opprinnelige koden din er at variablene "xPosisjonStreng" osv. i Person-klassen får verdier når et Person-objekt blir opprettet, dermed vil xPosisjonStreng alltid få verdien "0.0m" (da verdien av xPosisjon blir satt til 0.0 når et Person-objekt opprettes). Uten å ha sett oppgaven antar jeg at det er meningen du skal skrive en "toString()"-metode i Person-klassen, slik at du kan bruke "System.out.println(Person1);" i main-metoden (og vær så snill, ikke bruk stor bokstav først i variabelnavn...) Det stemmer jonny. "toString()" metoden skal være i person-klassen som du sier. Noen tips? henger som sagt fast.. Lenke til kommentar
Gavekort Skrevet 16. september 2015 Del Skrevet 16. september 2015 Problemet ditt er at Double xPosisjonDouble = new Double(hentXPosisjon()); String xPosisjonStreng = xPosisjonDouble.toString() + "m"; Double yPosisjonDouble = new Double(hentYPosisjon()); String yPosisjonStreng = yPosisjonDouble.toString() + "m"; Kjøres mens hentXPosisjon() enda returnerer en null-verdi. Så du må sette disse verdiene etter at du har gjort: System.out.println("Skriv inn X-posisjon: "); Person1.settXPosisjon(tastatur.nextDouble()); System.out.println("Skriv inn Y-posisjon: "); Person1.settYPosisjon(tastatur.nextDouble()); Lenke til kommentar
jonny Skrevet 16. september 2015 Del Skrevet 16. september 2015 (endret) Klassen "Object" (som alle klasser i Java er subklasse av) inneholder en del metoder, bl.a. denne: public String toString() Du kan dermed override denne i Person-klassen, f.eks. slik: @Override // denne er ikke nødvendig, men anbefalt å bruke når du mener 'override' public String toString() { return "Person: " + navnPerson; } Jeg har med vilje ikke tatt med posisjonen, det må du gjøre selv (og sikkert også fjerne "Person: " før navnet). Hvis du har et Person-objekt "p" kan du dermed bruke denne metoden slik: System.out.println(p); For et Java-objekt blir automatisk "toString()"-metoden kalt når man i en eller annen sammenheng returnerer et objekt uten å kalle en metode eksplisitt og et String-objekt er gyldig i denne sammenhengen. Les mer om Object-klassen her: http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html Endret 16. september 2015 av jonny 1 Lenke til kommentar
jonny Skrevet 16. september 2015 Del Skrevet 16. september 2015 (endret) Problemet ditt er at Double xPosisjonDouble = new Double(hentXPosisjon()); String xPosisjonStreng = xPosisjonDouble.toString() + "m"; Double yPosisjonDouble = new Double(hentYPosisjon()); String yPosisjonStreng = yPosisjonDouble.toString() + "m"; Kjøres mens hentXPosisjon() enda returnerer en null-verdi. Så du må sette disse verdiene etter at du har gjort: System.out.println("Skriv inn X-posisjon: "); Person1.settXPosisjon(tastatur.nextDouble()); System.out.println("Skriv inn Y-posisjon: "); Person1.settYPosisjon(tastatur.nextDouble()); Mulig dette blir litt flisespikkeri, men hentXPosisjon() returnerer aldri en null-verdi, men verdien av double-variabelen xPosisjon. Variablene blir alle initialisert når et Person-objekt kreeres, og dermed vil alltid xPosisjonDouble inneholde verdien 0.0 og xPosisjonStreng ha verdien "0.0m". Disse 4 siste variablene i Person-klassen er helt ubrukelige, de bør byttes ut med metoder for å få ut det som ønskes, evt. kan de settes når settXPosisjon()/settYPosisjon kalles. Endret 16. september 2015 av jonny 1 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å