Gå til innhold

Klasse, constructorer, get/set - Hjelp


Anbefalte innlegg

Ok, skal lage et program hvor bruker skal skrive inn 3 lengder. m + cm + mm er 1 lengde, og det skal da gjøres 3 ganger. Dette skal gjøres i en egen klasse. Klassen skal inneholde ’constructor’-er, minst 2. Videre skal klassen inneholde en metode for å regne om lengden til desimaltall (lov å benytte double! (ikke benytt float)), og en metode add_length som legger til en ny lengde. Metoden add_length skal med andre ord være en objekt-metode som legger til et nytt objekts data. Lag et program som oppretter 3 objekter av denne klassen og leser data inn i disse 3 variablene. Ikke benytt tabeller denne gangen. Lag gjerne en metode/funksjon for innlesing av et objekts verdier. Denne metoden skal ikke ligge i klassen Lengde. Skriv så ut verdien av disse dataene som et desimaltall. Programmet skal få lagt sammen de 3 lengdene som blir lest inn og resultatet skrives ut. De opprinnelige lengden skal ikke endres underveis. Hele oppgaven skal løses med 2 klasser: én for Lengde og én som inneholder main og evt. andre metoder. Det skal ikke skje innlesing/utskrift fra klassen Lengde. Variablene for m, cm og mm skal ha ’modifier’ ’private’. Programmet/klassen(e) må da eventuelt oppdateres med flere metoder (get-er og set-er ) for å ta hensyn til dette.

 

//OK...

public class StructKlasse
{
   public static void main(String[] args)
   {

   }
}

class lengde
{
   private int m;
   private int cm;
   private int mm;

   lengde() //default constructor (setter alle lengder til 1 dersom bruker ikke setter inn noe tall)
   {
       m = 1;
       cm = 1;
       mm = 1;
   }

   lengde(int newM, int newCM, int newMM) //constructor som setter inn brukerens verdier
   {
       m = newM;
       cm = newCM;
       mm = newMM;
   }

   double desimal()
   {
       return m * 10 + cm / 100 + mm / 1000;
   }

   public void add_length()
   {
       lengde lengthOne = new lengde(m, cm, mm);
       lengde lengthTwo = new lengde(m, cm, mm);
       lengde lengthThree = new lengde(m, cm, mm);
   }

   public double getLengthOne()
   {
       return lengthOne;
   }

   public double getLengthTwo()
   {
       return lengthTwo;
   }

   public double getLengthThree()
   {
       return lengthThree;
   }

   public void setLengthOne(int newM, int newCM, int newMM) 
   {
       m = (newM >= 0) ? newM : 0;
       cm = (newCM >= 0) ? newCM : 0;
       mm = (newMM >= 0) ? newMM : 0;
   }

   public void setLengthTwo(int newM, int newCM, int newMM) 
   {
       m = (newM >= 0) ? newM : 0;
       cm = (newCM >= 0) ? newCM : 0;
       mm = (newMM >= 0) ? newMM : 0;
   }

   public void setLengthThree(int newM, int newCM, int newMM) 
   {
       m = (newM >= 0) ? newM : 0;
       cm = (newCM >= 0) ? newCM : 0;
       mm = (newMM >= 0) ? newMM : 0;
   }
}

 

Så det jeg lurer på er hva jeg gjør feil med get/set- metodene og om add_lentgh er rett. Har ikke gjort hele programmet, men det er der jeg er nå.

Endret av mx1000
Lenke til kommentar
Videoannonse
Annonse
Java provides a default specifier which is used when no access modifier is present. Any class, field, method or constructor that has no declared access modifier is accessible only by classes in the same package. The default modifier is not used for fields and methods within an interface.

 

 public void add_length()
   {
       lengde lengthOne = new lengde(m, cm, mm);
       lengde lengthTwo = new lengde(m, cm, mm);
       lengde lengthThree = new lengde(m, cm, mm);
   }
public double getLengthOne()
   {
       return lengthOne;
   }

   public double getLengthTwo()
   {
       return lengthTwo;
   }

   public double getLengthThree()
   {
       return lengthThree;
   }

Hva er dette for noe tullball? Disse objektene falt ut av scope i funksjonen de ble deklarert.

Endret av GeirGrusom
Lenke til kommentar

Alle variabler som deklareres innenfor

{

 

}

faller ut av scope etter }

{ betyr at stack pekeren lagres

} betyr at stack pekeren hentes tilbake igjen (og dermed blir alle objekter lagret på stack ikke lenger tilgjengelig, og alle objekter vil bli klargjort for GC)

Derfor er ikke variabler som er deklarert i en funksjon tilgjengelig i en annen. Variabelen må derfor deklareres inn i klassen eller et annet sted.

Her bør du derimot lagre dem i hovedprogrammet.

 

edit: forumet går latterlig sakte her og... Trodde det var beskyttet mot double-posting i forrige versjon :/

Endret av GeirGrusom
Lenke til kommentar
public class Length // stor L, dette er en klasse, ikke en package
{
 private int m, cm, mm,

 public Length()
 {
   m = 0; cm = 0; mm = 0;
 }
 public Length(int m, int cm, int mm)
 {
   this.m = m; this.cm = cm; this.mm = mm;
 }
 public int get_Meter() { return m; }
 public void set_Meter(int value) { m = value; }

 public int get_Centimeter() { return cm; }
 public void set_Centimeter(int value) { cm = value; }

 public int get_Millimeter() { return mm; }
 public void set_Millimeter(int value) { mm = value; }

 public Length addLength(Length other)
 {
   Length resultat = new Length();
   // Her er jobben du må gjøre.
   // ...
   return resultat;
 }
}

Lenke til kommentar

Så add_length skal altså legge sammen de 3 lengdene da?

 

//OK...

public class StructKlasse
{
   public static void main(String[] args)
   {
       Lengde lengthOne = new Lengde(1, 1, 1);
       Lengde lengthTwo = new Lengde(2, 2, 2);
       Lengde lengthThree = new Lengde(3, 3, 3);

       System.out.println(lengthOne.desimal());
   }
}

class Lengde
{
   private int m;
   private int cm;
   private int mm;

   Lengde() //default constructor (setter alle lengder til 1 dersom bruker ikke setter inn noe tall)
   {
       m = 0;
       cm = 0;
       mm = 0;
   }

   Lengde(int m, int cm, int mm) //constructor som setter inn brukerens verdier
   {
       this.m = m;
       this.cm = cm;
       this.mm = mm;
   }

   double desimal()
   {
       return m * 10 + cm / 100 + mm / 1000;
   }

    public int getMeter()
    {
       return m;
    }

    public void setMeter(int value)
    {
        m = value;
    }

    public int getCentimeter()
    {
       return cm;
    }

    public void setCentimeter(int value)
    {
        cm = value;
    }

    public int getMillimeter()
    {
       return mm;
    }

    public void setMillimeter(int value)
    {
        mm = value;
    }

    public Lengde add_length(Lengde annet)
    {
       Lengde resultat = new Lengde();
       resultat = lengthOne.desimal() + lengthTwo.desimal() + lengthThree.desimal();
       return resultat;
    }
}

 

Om jeg hadde fjernet add_length nå, så hadde jeg fått ut at den første lengden er 10.00 dm. Skulle vært 10.11, så her har jeg bommet på noe int(double bare. Men for å fullføre programmet så må jeg få add_length til å lage summen av de tre og endre litt på utskriften i main, ikke sant?

Lenke til kommentar

addLength skal legge sammen to lengder.

 

for da er a+b+c = (a+b)+c

Altså

c = (a.Addlength(b)).addLength©;

 

Det er ulogisk å lage en funksjon for å addere tre enheter, og det er også mye vanskeligere.

 

Main instansierer de tre enhetene, dette gjøres ikke i klassen.

 

class Main
{
 static void main()
 {
   Lengde a = new Lengde(), b = new Lengde(), c = new Lengde();

   // Fyll inn dara

   Lengde resultat = a.addLength(b).addLength(c);

   // Skriv ut
   Console.writeln(resultat.toString());
 }
}

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