2011-11-21, 19:52
  #1
Medlem
hej!
jag har en uppgift till skolan och jag har fastnat ordentligt mycket på,
jag är fortfarande väldigt ny till java just nu så det blir lite svårt för mig!

uppgiften följer:


Din uppgift är att utöka projektet och designa en klass med benämningen Gata. Instanser
av denna klass håller information om en gata genom att hantera en lista som innehåller
alla hus som finns utmed gatan. Listan i sin tur är ett fält (dvs. en medlemsvariabel) av
klassen
ArrayList<Hus>.

Klassen du skall designa skall innehålla:
1. En konstruktor som instansierar listan för hantering av hus samt namnger gatan
enligt ett parameterangivet namn.
2. En metod för att bygga ett hus på gatan (lägger till ett hus-objekt i listan). Det är
valfritt ifall huset levereras färdigbyggt (hus-objekt som parameter) eller om huset
byggs på plats enligt ”specifikationer” (husets egenskaper anges som parametrar).


här är koden jag har kommit fram till : den här fick vi till uppgiften

Kod:
import java.util.*;
public class Hus {
    private int yta;
    private String farg;
    
    public Hus(int yta, String farg) {
        this.yta = yta;
        this.farg = farg;
    }
    
    public void malaOm(String nyFarg) {
        farg = nyFarg;
        
    }
    
    public void byggUt(int utbyggnad) {
        yta += utbyggnad;
    }
    
    public String getFarg() {
        return farg;
    }
    
    public int getYta() {
        return yta;
    }
}

och den här har jag kommit fram till:
Kod:
import java.util.*;
public class gata 
{

   
private ArrayList<String> gata;

    /**
     *  constructor
     * 
     */
    public gata()
    {
        gata = new ArrayList<String>();
    }

    /**
     * Adda hus till gatan
     */
    public void storeHus(String hus)
    {
        gata.add(hus);
    }

    /**
     * @returnerar hur många hus som finns på gatan
     */
    public int numberOfHus()
    {
        return gata.size();
    }
     public void listHus()
    {
        for(String hus : gata) {
            System.out.println(hus);
        }
    }
}

vet inte hur jag ska få informationen från den andra klassen till gata klassens arraylist?

resten tror jag att jag har koll på!

har försökt med massa saker men hittar inge bra.

någon som kan hjälpa?
Citera
2011-11-21, 20:08
  #2
Medlem
dMobergs avatar
ArrayList<String> är väl en array av strängar? Byt till ArrayList<Hus>.
Citera
2011-11-21, 21:19
  #3
Moderator
Protons avatar
Citat:
Ursprungligen postat av dMoberg
ArrayList<String> är väl en array av strängar? Byt till ArrayList<Hus>.
Du måste troligen även ändra i signaturen till metoden addHus så att den kan ta en Husreferens och inte som nu en Stringreferens.

Du bör dessutom ha nån metod i din husklass för attskriva ut en textuell representation av ett hus. toString()-metoden skulle du utan problem kunna använda till det. Hur ska du annars kunna skriva ut ett hus? Kompilatorn vet inte det rätt upp och ner, men ger du den en överlagrad toString kommer det att funka med System.out...

Edit: storeHus hade du visst kallat den...
__________________
Senast redigerad av Proton 2011-11-21 kl. 21:22.
Citera
2011-11-21, 23:22
  #4
Medlem
* Aja baja, aldrig små bokstäver i klassnamn
* Förutom att "listHus" är ett dumt namn på någonting som returnerar en sträng, så kanske den inte fyller så stor funktion innan du lägger till en unik identifierare på varje Hus-objekt, t ex: ett gatunummer?
* Finns det inga fler variabler som du tror kan vara intresant för Street/Gata? Namn och postnummer skulle väl vara två ganska naturliga instansvariabler?


Lite pointers:
1) Kanske inte superviktigt när man sitter och hobbyknackar, men jag tycker ändå att det kan vara klokt att alltid skriva på engelska
2) Var alltid kritiskt till namnen på dina variabler och metoder. Riktigt bra kod skall nästan gå att förstå för icke-programmerare.
3) Skriv inte kommentarer i onödan, det gör bara koden "pratig" och svår att läsa. Att din metod med en rad kod vid namn "addHouse" lägger till ett hus, bör väl knappast kommenteras?
4) En personlig preferens, men jag föredrar den här användningen av måsvingar, för att göra koden kompaktare .

Kod:
import java.util.*;
public class Street {

private ArrayList<Hus> housesOnStreet;

    public Street(){
        housesOnStreet = new ArrayList<Hus>();
    }

    public void addHouse(Hus hus){
        housesOnStreet.add(hus);
    }

    public int getNoOfHousesOnStreet(){
        return housesOnStreet.size();
    }
    public List getHousesOnStreet(){
        return housesOnStreet;
    }
}
Citera
2011-11-22, 14:29
  #5
Medlem
TACK som fan för hjälpen dudes
fick fram det till så här! nu får jag iallafall fram något

Kod:
import java.util.*;
public class gata
{

   
private ArrayList<Hus> gata;

    
    public gata()
    {
        gata = new ArrayList<Hus>();
    }

    public void storeHus(Hus hus)
    {
        gata.add(hus);
    }

    public int numberOfHus()
    {
        return gata.size();
    }
     public void listHus()
    {
        int index = 0;
        for(Hus hus : gata) {
            System.out.println(index + ": " + hus);
            index++;

        }
    }
}





men koden jag får fram blir ändå int rätt det står en lista så här

obs: kolla bilden


Uploaded with ImageShack.us

http://imageshack.us/photo/my-images/52/84110722.jpg/
Citera
2011-11-22, 14:59
  #6
Medlem
1) Även om du nu envisas med att behålla de svenska namnen så MÅSTE du döpa om din klass gata till Gata

2) Att ha en instansvariabel som innehåller en lista med hus och döpa den till "gata" är dumt nog, men att dessutom döpa den till gata i en klass som heter gata, gör att din pyttelilla kodsnutt blir sååå onödigt svår att läsa.


När du försöker skriva ut ett objekt (som du gör) så kommer du anropa toString()-metoden som ligger ärvs från pappa-objektet Object. I sin ärvda form så ger inte toString() dig särskilt mycket.

Antingen overridar du toString()-metoden och skriver din egen, eller så gör du en utskriftsMetod som returnerar en sträng.

Lägg till följande metod i ditt Hus-objekt

Kod:
public String writeHouseInfo(){
      return "Yta: " +  yta + ", " + "Färg: " + farg;   
}

sedan skriver du om din for-each:

Citat:
index i = 1;
for(Hus hus:gata){
System.out.prinln("Hus nr: " + i + " -> " + hus.writeHouseInfo);
i++;
}
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in