Avatar billede simonvalter Praktikant
12. marts 2003 - 18:40 Der er 20 kommentarer og
3 løsninger

Hjælp til opgave.

jeg har nogen eksamens opgaver liggende som jeg øver mig på så det ikke går helt galt til sommer når jeg skal op til eksamen 2.semester

det ville være rart hvis der var nogen der ville kigge det igennem som jeg har lavet og kommentere det .. evt komme med forslag til hvordan de ville gøre det og se efter fejl da jeg vil starte på at lave en masse gode referancer til min egen eksamen.

så har jeg også lidt problemer med at tilføje en tank til en benzintank (Vector) som jeg godt vil have nogen forslag til da jeg vist har glemt hvordan man gør ;)



til sidst ville jeg godt høre om der er nogen der har nogle gamle eksamens opgaver ( svarende til 2.semester datamatiker) liggende som jeg kan få eller kender et sted som jeg kan se dem ..


mine klasser+opgaven har jeg lagt her
http://gbit.dk/Opgaven.txt
http://gbit.dk/Tank.java.txt
http://gbit.dk/BenzinTank.java.txt
http://gbit.dk/BrugTank.java.txt
http://gbit.dk/Opgaven.txt

jeg forventer ikke en fuldstændig besvarelse af opgaven .. bare nogle gode råd og kommentarer til hvad jeg har lavet i forvejen og så lige lidt hjælp til Vector problemet ;)
Avatar billede Slettet bruger
12. marts 2003 - 19:00 #1
Du skriver ikke hvilken uddannelsen du følger? Hvis du bare vil have opgaver at løse, så kan du jo se lidt på disse her

http://www.daimi.au.dk/dADS/eksamen.html

Hvis du ser på årene før 2000 er der vist en enkelt programmeringsopgave i hvert sæt, men de er noget mere avancerede end dem du selv kom med. Dog er de designet til at man kan løse dem i hånden til den skriftlige eksamen, så de skulle være overkommelige.
Avatar billede Slettet bruger
12. marts 2003 - 19:00 #2
ups, i samme sekund jeg trykkede udfør så jeg der stod 2.semester datamatiker. Sorry!
Avatar billede soreno Praktikant
12. marts 2003 - 19:08 #3
Du kan tilføje en tank (simpel aggregering) sådan:

import java.util.*;

public class BenzinTank {
  private Vector tanke;
  [..]
  public BenzinTank(String navnP) {
        this.navn = navnP;
        indtægter = 0;
        udgifter = 0;
        tanke = new Vector();
    }
  [..]
  public void addTank(Tank tank)
  {
    tanke.addElement(tank);
  }

  public Tank getTank(int index)
  {
    return (Tanke)tanke.elementAt(i);
  }

  public int getAntalTanke()
  {
    return tanke.size();
  }
}


Du kan så bruge det sådan:

for(int i=0;i<t.getAntalTanke();i++)
{
  System.out.prinlnt(t.getTank(i)); //skriver toString() på tanken
}

(Jeg har ikke testet for typos osv.)
Avatar billede soreno Praktikant
12. marts 2003 - 19:10 #4
Hov der var ihvertfald en fejl (det er forvirrende med næsten ens navne ;-)
  public Tank getTank(int index)
  {
    return (Tank)tanke.elementAt(i);
  }
Avatar billede arne_v Ekspert
12. marts 2003 - 19:11 #5
Tank.java:

* constructor uden argumenter bør sætte class members til noget
* normalt returnerer set'ers void
* du bør smide en exception eller udskrive noget når der forsøges
  noget der ikke kan lade sig gøre
Avatar billede soreno Praktikant
12. marts 2003 - 19:11 #6
Jeg bemærker at du ikke har lavet en toString på Tank.. Det synes jeg du skulle.
Avatar billede arne_v Ekspert
12. marts 2003 - 19:13 #7
BenzinTank.java:

* samme omkring return type for set'ers
Avatar billede arne_v Ekspert
12. marts 2003 - 19:18 #8
Vector:

import java.util.Vector;

public class BenzinTank {
    private Vector tanke;
    ...
    public BenzinTank(String navnP) {
      ....
      tanke = new Vector();
    }
    ...
    public void addTank(Tank tank) {
        tanke.add(tank);
    }
    public int getNoTanke() {
        return tanke.size();
    }
    public Tank getTank(int n) {
      return (Tank)tanke.get(i);
    }
    public boolean removeTank(Tank tank) {
      return tanke.remove(tank);
    }
    ...
}
Avatar billede soreno Praktikant
12. marts 2003 - 19:19 #9
Jeg synes du skal vende denne type kode om..
    public double pumpFraTank(double liter)
    {
        if (liter > beholdning | liter < 0)
        {}
        else
        {
            beholdning = beholdning-liter;
            pumpetOp = pumpetOp+liter;
        }
        return liter;
    }

Til noget ala;

public void pumpFraTank(double liter)
{
  if(liter < beholdning | liter > 0)
  {
    beholdning = beholdning - liter;
    pumpetOp += liter; //jeg foretrækker denne notation.. :-)
  }
}

Bemærk iøvrigt at der ikke returneres noget.. (som Arne har været inde på)
Avatar billede simonvalter Praktikant
12. marts 2003 - 19:27 #10
ok jeg kigger lige på det ;) jeg havde vist lavet Vectoren rigtig i nogen af mine forsøg men bare glemt toString
Avatar billede arne_v Ekspert
12. marts 2003 - 19:28 #11
Jeg ville enten lave den som:

public void pumpFraTank(double liter) {
  if(liter < beholdning | liter > 0) {
    beholdning = beholdning - liter;
    pumpetOp += liter;
  } else {
    System.out.println("ønsket benzin kan ikke pumpes: " + liter);
  }
}

eller:

public double pumpFraTank(double liter) {
  if(liter > 0) {
    double faktisk = (liter <= beholdning) ? liter : beholdning;
    beholdning = beholdning - faktisk;
    pumpetOp += faktisk;
    if(faktisk < liter) {
      System.out.println("Kun " + faktisk + " pumpet op");
    }
  } else {
    System.out.println("ønsket benzin kan ikke pumpes: " + liter);
  }
}
Avatar billede arne_v Ekspert
12. marts 2003 - 19:29 #12
Hov den sidste skal være:

public double pumpFraTank(double liter) {
  if(liter > 0) {
    double faktisk = (liter <= beholdning) ? liter : beholdning;
    beholdning = beholdning - faktisk;
    pumpetOp += faktisk;
    if(faktisk < liter) {
      System.out.println("Kun " + faktisk + " pumpet op");
    }
    return faktisk;
  } else {
    System.out.println("ønsket benzin kan ikke pumpes: " + liter);
    return 0;
  }
}
Avatar billede magoo20000 Nybegynder
12. marts 2003 - 19:35 #13
Hvis du vil have opgaver fra Dm studiet (2.sem) har jeg en del liggende + besvarelser i pdf-format!?
Avatar billede arne_v Ekspert
12. marts 2003 - 19:36 #14
Pointen er at selv om der ikke er al den benzin som man vil have,
så pumper man naturligvis det op der er.
Avatar billede simonvalter Praktikant
12. marts 2003 - 19:39 #15
smart arne_v ;)

ja tak magoo20000  .. hvis du ikke har mulighed for at ligge dem online så er min mail loadet@gbit.dk
Avatar billede soreno Praktikant
12. marts 2003 - 19:47 #16
"en der kan gemme benzintanken i en fil på harddisken."

Kunne (muligvis?) gøres sådan:
public class BenzinTank implements Serializable{

public void writeBenzinTank(String filNavn)
{
  try
  {
    File fil = new File(filNavn");
    FileOutputStream fileOutStream = new FileOutputStream(fil);
    ObjectOutputStream objectOutStream = new ObjectOutputStream(fileOutStream);
    objectOutStream.writeObject(this);
    objectOutStream.close();
  }
  catch(IOException e)
  {
    System.out.println("Systemet har udført en ulovlig handling og du vil blive straffet efter §41");
    e.printStackTrace();
  }
}

public void readBenzinTank(String filNavn)
{
  BenzinTank temp;
  try
  {
    File fil = new File(filNavn");
    FileInputStream fileInStream = new FileInputStream(fil);
    ObjectInputStream objectInStream = new ObjectInputStream(fileInStream);
   
    temp = (BenzinTank)objectInStream.readObject();
    objectInStream.close();           
  }
  catch(IOException e)
  {
    e.printStackTrace();
  }
  catch(ClassNotFoundException e)
  {
    e.printStackTrace();
  }
  this.navn = temp.navn;
  this.indtægter = temp.indtægter ;
  this.udgifter = temp.udgifter ;
  this.antalTanke = temp.antalTanke;
  this.tanke = temp.tanke;
}

//Tank skal også kunne serialiseres:
public class Tank implements Serializable
{
[..]

(Også utestet..)
Avatar billede magoo20000 Nybegynder
12. marts 2003 - 19:48 #17
Har fundet dem - sender dem om 10 mins... Skal lige se, om jeg også kan ligge dem ud et sted.
Avatar billede soreno Praktikant
12. marts 2003 - 19:49 #18
Hov, den bør se sådan ud:

public void readBenzinTank(String filNavn)
{
  BenzinTank temp;
  try
  {
    File fil = new File(filNavn");
    FileInputStream fileInStream = new FileInputStream(fil);
    ObjectInputStream objectInStream = new ObjectInputStream(fileInStream);
 
    temp = (BenzinTank)objectInStream.readObject();
    this.navn = temp.navn;
    this.indtægter = temp.indtægter ;
    this.udgifter = temp.udgifter ;
    this.antalTanke = temp.antalTanke;
    this.tanke = temp.tanke;
    objectInStream.close();         
  }
  catch(IOException e)
  {
    e.printStackTrace();
  }
  catch(ClassNotFoundException e)
  {
    e.printStackTrace();
  }
}
Avatar billede arne_v Ekspert
12. marts 2003 - 19:54 #19
Serialization er meget nemt.

Men ikke særligt godt til egentlig persistering.

Fint til at sende fra et program til et andet program over en
socket.

Fint til at save og loade fra en temporær fil.

Men ikke nødvendigvis godt til at gemme data i fra dag til dag
(eller værre endnu over en længere periode).

Problemerne opstår hvis man retter i sin klasse.

Til egentlig persistering kan anbefales JDBC til en database
eller XML filer.
Avatar billede simonvalter Praktikant
12. marts 2003 - 20:06 #20
hehe ok .. jeg har selv rodet lidt med jdbc til min mysql server og xml men jeg tvivler på at det er noget vi kommer op i, i 2. semester så jeg vil holde mig til at træne de (nemme) ting først ;)
Avatar billede magoo20000 Nybegynder
12. marts 2003 - 20:09 #21
God ide at lære det grundigt fra bunden først, men XML, XSD, XPATH osv. er ikke svært at komme igang med.. Kan dog blive ret kompliceret i længden!
Avatar billede simonvalter Praktikant
12. marts 2003 - 20:15 #22
ok tak for hjælpen allesammen da i alle har givet mig noget jeg kan bruge deler i point :=)
Avatar billede magoo20000 Nybegynder
12. marts 2003 - 20:18 #23
66x1000 tiktak!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester