Gå til innhold

Anbefalte innlegg

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
Videoannonse
Annonse

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 av Gavekort
Lenke til kommentar

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

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 av Gavekort
Lenke til kommentar

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 av jonny
Lenke til kommentar

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

Lenke til kommentar

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

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 av jonny
  • Liker 1
Lenke til kommentar

 

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 av jonny
  • Liker 1
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...