17 svar
485 visningar
popelos 183
Postad: 29 dec 2024 14:05 Redigerad: 29 dec 2024 14:20

Java_Hundregister_1.1_Owner

Hej och tack för hjälp igår!

Nu har jag gått igenom material för förmiddagen och det börjar bli dags att försöka lösa inlämningsuppgifter dock är det problem har programmerat 5 veckor + 3 veckor i denna kurs. så mycket är nytt som sagt. 

"I denna f¨orsta version ska en ¨agare bara ha ett namn, inget annat. Detta namn skas¨attas n¨ar en instans av klassen skapas, och ska d¨arefter bara g˚a att l¨asa av, inte¨andra. N¨ar namnet s¨atts ska det normaliseras till ett standardformat. Du f˚ar sj¨alvv¨alja om detta format ska vara det vanliga s¨attet att skriva namn med stor begynnelsebokstav (Stefan) eller ett enklare format med bara stora bokst¨aver (STEFAN)."

Frågor: 

Owner är alltså min klass? 

-name:String innebär att namn skall kunna tas i form av datatypen sträng och vara privete?

+Owner(string) innebär att ägare skall kunna tas i form av datatypen sträng och vara publik? 

+getName()String är en metod som skall kunna anropa name som String och publiK? 

+toString() också en metod String och publik?

Är detta rätt tänk då skapar jag kod och återkommer vid eventuella frågor! 

Glömde tillägga att det finns testar som kollar namn som stödjer "Stefan" eller "STEFAN" och då bör man väl välja "Stefan" och kolla av med någon metod som jag ej vet vilken/vilka det är att "S" görs till stor bokstav och de andra tas in som små bokstäver? 

/Tack

 

 

 

thedifference 576
Postad: 29 dec 2024 14:46 Redigerad: 29 dec 2024 14:51
popelos skrev:

Owner är alltså min klass? 

-name:String innebär att namn skall kunna tas i form av datatypen sträng och vara privete?

+Owner(string) innebär att ägare skall kunna tas i form av datatypen sträng och vara publik? 

+getName()String är en metod som skall kunna anropa name som String och publiK? 

+toString() också en metod String och publik?

Är detta rätt tänk då skapar jag kod och återkommer vid eventuella frågor! 

Glömde tillägga att det finns testar som kollar namn som stödjer "Stefan" eller "STEFAN" och då bör man väl välja "Stefan" och kolla av med någon metod som jag ej vet vilken/vilka det är att "S" görs till stor bokstav och de andra tas in som små bokstäver? 

  1. Ja, Owner är din klass.
  2. Nej, det betyder bara att Owner har ett privat attribut name som är en sträng. Det säger faktiskt inget om hur den variabeln ska få ett värde.
  3. Det enda sättet jag kan tolka det på är att constructorn för Owner ska ta en sträng som argument. Av uppgiftsbeskrivningen inser vi att denna sträng ska sparas i attributet name.
  4. Det är en getter för attributet name, som ska returnera värdet av name. Den är publik.
  5. Ja. Här förväntas en beskrivning av objektet, t.ex. "Owner with the name <name>".
  6. Det som förväntas är att vilket namn du än får i constructorn så standardiserar du det innan du sparar det. Om du väljer Stefan-strukturen och får peTEr så ska det sparas som Peter. Har du STEFAN-strukturen ska det namnet bli PETER.

    Du kan använda .toUpperCase() för att åstadkomma den andra versionen.
popelos 183
Postad: 29 dec 2024 15:20
thedifference skrev:
popelos skrev:

Owner är alltså min klass? 

-name:String innebär att namn skall kunna tas i form av datatypen sträng och vara privete?

+Owner(string) innebär att ägare skall kunna tas i form av datatypen sträng och vara publik? 

+getName()String är en metod som skall kunna anropa name som String och publiK? 

+toString() också en metod String och publik?

Är detta rätt tänk då skapar jag kod och återkommer vid eventuella frågor! 

Glömde tillägga att det finns testar som kollar namn som stödjer "Stefan" eller "STEFAN" och då bör man väl välja "Stefan" och kolla av med någon metod som jag ej vet vilken/vilka det är att "S" görs till stor bokstav och de andra tas in som små bokstäver? 

  1. Ja, Owner är din klass.
  2. Nej, det betyder bara att Owner har ett privat attribut name som är en sträng. Det säger faktiskt inget om hur den variabeln ska få ett värde.
  3. Det enda sättet jag kan tolka det på är att constructorn för Owner ska ta en sträng som argument. Av uppgiftsbeskrivningen inser vi att denna sträng ska sparas i attributet name.
  4. Det är en getter för attributet name, som ska returnera värdet av name. Den är publik.
  5. Ja. Här förväntas en beskrivning av objektet, t.ex. "Owner with the name <name>".
  6. Det som förväntas är att vilket namn du än får i constructorn så standardiserar du det innan du sparar det. Om du väljer Stefan-strukturen och får peTEr så ska det sparas som Peter. Har du STEFAN-strukturen ska det namnet bli PETER.

    Du kan använda .toUpperCase() för att åstadkomma den andra versionen.

Stort tack. 

2. Ok då förstår jag mer.

3. Ja juste det är konstruktor jag var lite snabb där.  för att den heter samma som klass "Owner"

4.  "Det är en getter för attributet name, som ska returnera värdet av name. Den är publik."

"getter"? kallas inte detta för metod eller anrop 

5.  Ok får kolla på det. 

6. Om jag vill välja "Stefan" strukturen vilket metod är det då? 

För "Du kan använda .toUpperCase() för att åstadkomma den andra versionen." 

Det fungerar i denna uppgift men känns konstigt att köra gemener struktur? men är det ok kan jag köra på det.  

thedifference 576
Postad: 29 dec 2024 15:28

Ja, det är en metod. Det är bara vanlig nomenklatur att en metod som skickar tillbaka värdet på ett attribut är en getter. En metod som ställer in värdet på ett attribut är en setter.

Finns nog inte en metod för att tvinga fram Stefan-struktur i Javas egna bibliotek. Du kan åstadkomma det med substrings. Första bokstaven toUpperCase och resten toLowerCase.

popelos 183
Postad: 29 dec 2024 15:50 Redigerad: 29 dec 2024 15:50

Jag har börjat skriva men det är svårt.  Får två syntax errors vid return på rad 15 och 19 när jag returneran "name och "string" 

"N¨ar namnet s¨atts ska det normaliseras till ett standardformat. Du f˚ar sj¨alvv¨alja om detta format ska vara det vanliga s¨attet att skriva namn med stor begynnelsebokstav (Stefan) eller ett enklare format med bara stora bokst¨aver (STEFAN)." 

hur skall del två -nameString hanteras? 

"N¨ar namnet s¨atts ska det normaliseras till ett standardformat. Du f˚ar sj¨alvv¨alja om detta format ska vara det vanliga s¨attet att skriva namn med stor begynnelsebokstav (Stefan) eller ett enklare format med bara stora bokst¨aver (STEFAN)."

Vart skall .toUpperCase()  in är det vid get metod "getname() eller vid "String name"; om den ens skall vara med?

 

/Tack för hjälpen.

sictransit 2890 – Livehjälpare
Postad: 29 dec 2024 16:03

Vad säger de syntaxfel du får? Ofta är de en bra ledtråd till vad som är fel. 

För oss som försöker hjälpa till är det jättebra om du bifogar de fel du får. Det är även lättare om du använder funktionen "infoga programmeringskod" (knappen {;} i menyn), istället för att ta en skärmdump.

Du ser att du har fått röda markeringar på rad 16 och 19. De visar ofta (inte alltid) var felen finns. För just dessa behöver jag inte veta vad du fått för fel.

  • Varje metod skall inledas med { och avslutas med }. Ser du vad som saknas i getName()?
  • toString() skall returnera något som beskriver objektet. Just nu försöker du returnera "string", vilket kompilatorn inte har en aning om vad det betyder. Tyckte jag såg något i stil med "Owner with the name ..." ovan. Returnera den strängen istället, med det givna namnet förstås.

Sedan är det snyggt att deklarera ditt fält "name" som private. Eftersom det enbart kan sättas av konstruktorn kan du faktiskt göra det till private final, men det är lite överkurs.

Vad gäller frågan om när du skall använda toUpperCase() resp. toLowerCase() säger uppgiften att det skall ske när namnet sätts.

popelos 183
Postad: 29 dec 2024 16:12
//klass
public class Owner { 
    String name; // ej statik för owner har ett unikt namn?


    //konstruktur
    public Owner (String name) { 

    

    }
// get metod
    public String getName() {
        return name;
// get metod    
    public String toString() {
        return string; 

    }    
}


Syntax errors:

Rad 16 , insert "}" to complete MethodBody (antagligen missar jag brackets) 

Rad 19 , String cannot be resolved to a variable (som du var inne på) 
sictransit 2890 – Livehjälpare
Postad: 29 dec 2024 16:18
popelos skrev:
//klass
public class Owner { 
    String name; // ej statik för owner har ett unikt namn?


    //konstruktur
    public Owner (String name) { 

    

    }
// get metod
    public String getName() {
        return name;
// get metod    
    public String toString() {
        return string; 

    }    
}


Syntax errors:

Rad 16 , insert "}" to complete MethodBody (antagligen missar jag brackets) 

Rad 19 , String cannot be resolved to a variable (som du var inne på) 

Korrekt analys, så bara att fixa:

  1. Fixa den saknade }.
  2. Returnera något vettigt i toString(), kanske bara name till att börja med.

Sätt name i konstruktorn.

När du gjort det bör du ha en fungerande klass. Sedan kan du börja meka med stora/små bokstäver.

popelos 183
Postad: 29 dec 2024 16:23

Stort tack. 

1. Den är fixad.

2. Jag testade faktiskt retunera name innan då komplierar det men jag får ut "null" som jag inte vet vad det är eller varför jag får det men det komplierar så jag går inte bakåt.  så antar att toString() ej skall retunera name? 

Skall inte Owner vara konstruktor det fungerar iaf inte att ha name eller så är det jag som gör fel. 

Innebär det att jag har en fungerande klass någorlunda om den komplierar och skriver ut "null" för då kan jag kolla på .toUpperCase() skall in! 

thedifference 576
Postad: 29 dec 2024 17:08

Den skriver ut null för att name är null. Inget fel på toString().

Din constructor behöver göra något med argumentet den får. Just nu kastas det bara bort. Likadant som en vanlig metod inte gör något om den är tom, hur många argument du än skickar till den.

sictransit 2890 – Livehjälpare
Postad: 29 dec 2024 17:15

Titta på den exempelklass Car jag klippte in i din förra tråd och vad som sker i dess konstruktor.

popelos 183
Postad: 30 dec 2024 15:14

Hej och tack för hjälp och tips.

Jag har nu byggt ut konstruktorn och försökt lösa ToUpperCase()

Men förstår ej hur jag skall få till "STEFAN" formatet i programmet har testat rätt mkt och kört fast hittar mest videos på typ String = txt  "Hej heter jag"; som sedan skriver ut det med uppercase men tkr ej det är det jag behöver. Hur jag skall tänka med omvandling till stora bokstäver vart skall det in behöver jag bygga ut någonting? 

jag skriver ej ut null längre så det ser bättre ut det som återstår är att göra utskriften till stora bokstäver.

//klass
public class Owner { 

// ej statik för owner har ett unikt namn?
    private String name; 
        

//konstruktur
    public Owner (String name) { 
        this.name = name; 
    
    }

//ToUpperCase()

    public Owner toUpperCase() {
        return new OwnerToUpperCase();
        

    }
// getter
    public String getName() {
        return name;
    }
// getter   
    public String toString() {
        return "Owner: " + name;
    }

        
}
popelos 183
Postad: 30 dec 2024 15:25
Detta har även testats utan resultat.


//klass
public class Owner { 

// ej statik för owner har ett unikt namn?
    private String name; 
        

//konstruktur
    public Owner (String name) { 
        this.name = name; 
    
    }

//ToUpperCase()

    private String adjustName(String name) {

    String adjustName = name.trim().toUpperCase();
    
    
    }
        

    
// getter
    public String getName() {
        return name;
    }
// getter   
    public String toString() {
        return "Owner: " + name;
    }

        
}
sictransit 2890 – Livehjälpare
Postad: 30 dec 2024 15:27 Redigerad: 30 dec 2024 15:28
popelos skrev:

Hej och tack för hjälp och tips.

Jag har nu byggt ut konstruktorn och försökt lösa ToUpperCase()

Men förstår ej hur jag skall få till "STEFAN" formatet i programmet har testat rätt mkt och kört fast hittar mest videos på typ String = txt  "Hej heter jag"; som sedan skriver ut det med uppercase men tkr ej det är det jag behöver. Hur jag skall tänka med omvandling till stora bokstäver vart skall det in behöver jag bygga ut någonting? 

jag skriver ej ut null längre så det ser bättre ut det som återstår är att göra utskriften till stora bokstäver.

//klass
public class Owner { 

// ej statik för owner har ett unikt namn?
    private String name; 
        

//konstruktur
    public Owner (String name) { 
        this.name = name; 
    
    }

//ToUpperCase()

    public Owner toUpperCase() {
        return new OwnerToUpperCase();
        

    }
// getter
    public String getName() {
        return name;
    }
// getter   
    public String toString() {
        return "Owner: " + name;
    }

        
}

I uppgiften står att namnet skall "normaliseras" när det sätts. Alltså skall det ske i konstruktorn.

Givet koden du postat så tror jag kompilatorn skriker åt dig rörande den här metoden:

//ToUpperCase()

    public Owner toUpperCase() {
        return new OwnerToUpperCase();
        

    }

Stryk den! 

Javas toUpperCase() är en metod som konverterar en sträng till stora bokstäver.

"hello world".toUpperCase() returnerar alltså "HELLO WORLD"

På samma sätt returnerar name.toUpperCase() vad som nu finns i variabeln name fast med stora bokstäver.

Du behöver alltså lägga till funktionen toUpperCase() i din konstruktor, där du får in argumentet name.

Som koden är skriven nu sätter du ditt lokala fält name till vad som skickas in i konstruktorn:

this.name = name

Nu skall du istället sätta this.name till vad som är i argumentet name, fast konverterat till stora bokstäver.

popelos 183
Postad: 30 dec 2024 15:30

Bra tips byggde på konstruktorn med 

this.name = name.toUpperCase();

och kan då skriva ut istället för "namn" "NAMN" i utskriften.

//klass
public class Owner { 

// ej statik för owner har ett unikt namn?
    private String name; 
        

//konstruktur
    public Owner (String name) { 
        this.name = name; 
        this.name = name.toUpperCase();
    
    }

//ToUpperCase()

            
// getter
    public String getName() {
        return name;
    }
// getter   
    public String toString() {
        return "Owner: " + name;
    }

        
}
popelos 183
Postad: 30 dec 2024 15:37

Testerna klara och godkända stort tack för hjälpen men det här är svårt. 

sictransit 2890 – Livehjälpare
Postad: 30 dec 2024 15:40 Redigerad: 30 dec 2024 16:41

Finemang, men du behöver inte sätta name två gånger i konstruktorn. Stryk den första, för nästa rad skriver ändå över. 

Jo, i början kan det kännas som mer eller mindre magi innan man förstått hur språket fungerar. Du lärde dig ju inte engelska på ett par lektioner heller. Java är inte lika komplicerat, men det är ett nytt språk för dig. 

thedifference 576
Postad: 30 dec 2024 16:59

toString() är förresten inte en getter. En getter bara skickar tillbaka ett attribut. Här har du ett exempel på en klass med tre attribut som alla har getters och setters, plus toString().

class Main {
    public static class Person {
        private String name;
        private double weight;
        private int age;
        
        public Person(String name, double weight, int age) {
            this.name = name;
            this.weight = weight;
            this.age = age;
        }
        
        public String getName() {
            return name;
        }
        
        public void setName(String name) {
            this.name = name;
        }
        
        public double getWeight() {
            return weight;
        }
        
        public void setWeight(double weight) {
            this.weight = weight;
        }
        
        public int getAge() {
            return age;
        }
        
        public void setAge(int age) {
            this.age = age;
        }
        
        public String toString() {
            return "My name is " + name + ". I am " + age + " years old and I weigh " + weight + "kg.";
        }
    }
    
    public static void main(String[] args) {
        Person person = new Person("Billy", 72.3, 32);
        System.out.println(person);
    }
}
Svara
Close