Avatar billede Slettet bruger
06. oktober 2002 - 10:46 Der er 29 kommentarer og
1 løsning

Parametre

Jeg har en classe:

public class P340KmTæller
{           

    int tripTæller;
   

    public P340KmTæller()
    { tripTæller = 0;
    }

    public void tripTæller(int km)
    {    tripTæller = km+tripTæller;
    }

    public int getTripTæller()
    { return tripTæller;
}
}

Værdien i triptælleren skulle jeg gerne have hentet over i denne classe:

class P340Bil

   
    int forbrug;
    int kmPrL;
   
    P340KmTæller tTæller = new P340KmTæller();
   
    public P340Bil()
    {    forbrug =0;
        kmPrL = 10;
    }
/*   
    public void kmPrL()
    {    kmPrL = 10;
    }   
*/   
       
   
    public int getBenzinForbrug()
    {    forbrug = tTæller.getTripTæller()/kmPrL;
        return forbrug;
    }

       
}

Men den bliver det ikke.
Jeg formoder at det har noget med parameteren at gøre. Men kan ikke gennemskue det.
Nogen der kan hjælpe?
Avatar billede Slettet bruger
06. oktober 2002 - 10:58 #1
Er det hele programmet ?
Hvis det er, så mangler du en 'main' klasse.

----------
public static void main(String[] args) {

}
----------

for at starte hele programmet.
Avatar billede Slettet bruger
06. oktober 2002 - 11:04 #2
Nej. Main classen ser sådan ud:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

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

    {    P340BTank benzinTank = new P340BTank();
        P340KmTæller kørteKilometer = new P340KmTæller();
        P340Bil test1 = new P340Bil();
       
        InputStreamReader read = new InputStreamReader(System.in);
        BufferedReader console = new BufferedReader(read);
   
   
        { try   
            {
   
            System.out.println("Hvor meget benzin fylder du på? ");
            String read1 = console.readLine();
            int liter = Integer.parseInt(read1);
            benzinTank.påfyldning(liter);
                       
            System.out.println("Hvor har du kørt? ");
            String read2 = console.readLine();
            int km = Integer.parseInt(read2);
            kørteKilometer.tripTæller(km);
            System.out.println("\nSe er der  " + benzinTank.getTankNiveau() + " liter benzin tilbage i tanken");
            }       
       
            catch(IOException e)
            {    System.out.println(e);
                System.exit(1);
            }
       
        }
           
    }
}

Herforuden er der:


public class P340BTank
{           
    int niveau;
    int påfyldning;
    int forbrug;
   
    P340Bil bForbrug = new P340Bil();
   
    public P340BTank()
    { niveau =0;
    }

    public void påfyldning(int påfyldning)
    { niveau = påfyldning + niveau;
    }
   
    public void tømning()
    { niveau =  - niveau - bForbrug.getBenzinForbrug();
    }
   
    public int getTankNiveau()
    {    return niveau;
    }
   
}
Avatar billede magoo20000 Nybegynder
06. oktober 2002 - 11:43 #3
Hvad får du af runtimefejl-hvis der er nogen?
Avatar billede magoo20000 Nybegynder
06. oktober 2002 - 11:47 #4
Lav P340Bil om til:
class P340Bil{ 
   
    private int forbrug;
    private int kmPrL;
    private P340KmTæller tTæller = null;
   
    public P340Bil(){
    tTæller = new P340KmTæller();
    forbrug =0;
    kmPrL();
    }
Ellers resten som det er.
Avatar billede magoo20000 Nybegynder
06. oktober 2002 - 11:53 #5
Og
public class P340BTank
{           
    private int niveau;
    private int påfyldning;
    private int forbrug;
    private P340Bil bForbrug = null;
   
    public P340BTank(){
    bForbrug = new P340Bil();
    niveau =0;
    }
Ellers resten som det er..

Og i din main-metode behøver du nu kun at lave en reference til P340Bil:
P340Bil test1 = new P340Bil();
Den opretter nu reference til P340KmTæller og P340KmTæller objekter.
Avatar billede magoo20000 Nybegynder
06. oktober 2002 - 11:56 #6
Om igen: P340BTank skal oprettes i main.
P340BTank benzinTank = new P340BTank();
Den opretter de to andre.
Avatar billede Slettet bruger
06. oktober 2002 - 12:28 #7
Jeg får stadig denne udskrift:

Hvor meget benzin fylder du på?
[TEST]  int liter = Integer.parseInt(read1);  34

Hvor meget har du kørt?
[TEST]  int km = Integer.parseInt(read2);  3

[TEST]kørteKilometer.getTripTæller() 0

[TEST]P340Bil.getBenzinForbrug() 0

Så er der  34 liter benzin tilbage i tanken

Det er ikke rigtig til gennemskue
Avatar billede magoo20000 Nybegynder
06. oktober 2002 - 12:50 #8
Så er jeg her igen.
Prøv det her (de kommer lidt efter lidt!)
public class P340KmTæller{           

    private int tripTæller;
   

    public P340KmTæller(){
    tripTæller = 0;
    }

    public void setTripTæller(int tripTæller){
    this.tripTæller += tripTæller;
    }

    public int getTripTæller(){
      return tripTæller;
}
}
Avatar billede magoo20000 Nybegynder
06. oktober 2002 - 12:51 #9
Ups
public void setTripTæller(int tripTæller){
    this.tripTæller = tripTæller;
    }
og

public void TælTripTællerOp(int tripTæller){
    this.tripTæller += tripTæller;
    }
Avatar billede magoo20000 Nybegynder
06. oktober 2002 - 12:59 #10
Hvorfor er der både en forbrug-attribut på Bil og Tank?
Avatar billede magoo20000 Nybegynder
06. oktober 2002 - 13:01 #11
public class P340Bil{ 
   
    private int forbrug;
    private int kmPrL;
    private P340KmTæller tTæller=null;
   
    public P340Bil(){ 
      tTæller = new P340KmTæller();
    forbrug = 0;
        kmPrL();
    }
 
    public void kmPrL(){   
        kmPrL = 10;
    }   
     
    public void setForbrug(int forbrug){
    this.forbrug=forbrug;
    }

    public int getForbrug(){
    return forbrug;
    }

    public void setKmPrL(kmPrL){
    this.kmPrL=kmPrL;
    }

    public int getKmPrL(kmPrL){
    return kmPrL;
    }
 
    public int getBenzinForbrug(){ 
        return tTæller.getTripTæller()/kmPrL;
    } 
}
Avatar billede =maddog= Nybegynder
06. oktober 2002 - 13:15 #12
brug float istedet for int, der hvor du har kommatal som følge af dividering
2/3 = 0 , hvorimod
2.0/3.0 = 0.66666
Avatar billede magoo20000 Nybegynder
06. oktober 2002 - 13:21 #13
public class P340BTank{
           
    private int niveau;
    private int påfyldning;
    private int forbrug;
    private P340Bil bForbrug = null;
   
public P340BTank(){
    bForbrug = new P340Bil();
    niveau = 0;
}

public void påfyldning(int påfyldning){
    niveau = påfyldning + niveau;
}
   
public void tømning(){
    niveau =  - niveau - bForbrug.getBenzinForbrug();
} //Er den her rigtig??

public int getTankNiveau(){   
    return bForbrug.getBenzinForbrug(){ 


}
Avatar billede magoo20000 Nybegynder
06. oktober 2002 - 13:28 #14
Og din triptæller skal jo også sættes - Ellers vil din division altid give nul.
Avatar billede Slettet bruger
06. oktober 2002 - 13:28 #15
public void tømning(){
    niveau = 0;
}

...burde kunne gøre det, eller hvad ?


Overvej at omdøbe dine metoder til f.eks.
getNiveau, setNiveau, getForbrug, setForbrug osv.
Avatar billede Slettet bruger
06. oktober 2002 - 13:31 #16
..ligesom magoo20000 har gjort  :-)
Avatar billede Slettet bruger
06. oktober 2002 - 14:36 #17
Så er jeg her igen.
Jeg havde et problem med et udendørsstik med for meget vand i....
Jeg ser og vender tilbage...
Avatar billede magoo20000 Nybegynder
06. oktober 2002 - 15:08 #18
Surt!
Man kunne også overveje, om det ikke ville være bedre design at løse denne opgave vha. arv. Bil som Superklasse og de to andre som sub-klasser.
Avatar billede Slettet bruger
06. oktober 2002 - 15:12 #19
Et skridt længere men ...

P340Bil.java:32: <identifier> expected
  public void setKmPrL(kmPrL)
                              ^
Der er noget(meget ;-)) som jeg ikke har forstået.

Hvorfor forlanger den en identifier efter (kmPrL)?



public class P340Bil


    private int forbrug;
  private int kmPrL;
  private P340KmTæller tTæller=null;

  public P340Bil()
    { 
        tTæller = new P340KmTæller();
        forbrug = 0;
      kmPrL();
    }
 
    public void kmPrL()
    {   
        kmPrL = 10;
    }   
     
    public void setForbrug(int forbrug)
    {
        this.forbrug=forbrug;
    }

    public int getForbrug()
    {
        return forbrug;
    }

    public void setKmPrL(kmPrL)
    {    this.kmPrL=kmPrL;
    }

    public int getKmPrL(kmPrL)
    {
        return kmPrL;
    }
 
    public int getBenzinForbrug()
    { 
        return tTæller.getTripTæller()/kmPrL;
    } 

}

/*
P340Bil.java:32: <identifier> expected
    public void setKmPrL(kmPrL)
                              ^
P340Bil.java:44: ')' expected
    } 
    ^
P340Bil.java:32: cannot resolve symbol
symbol  : class kmPrL 
location: class P340Bil
    public void setKmPrL(kmPrL)
                        ^
P340Bil.java:32: missing method body, or declare abstract
    public void setKmPrL(kmPrL)
                ^
4 errors
*/
Avatar billede Slettet bruger
06. oktober 2002 - 15:25 #20
...Den er jo defineret med " private int kmPrL " såvidt jeg ved.
Men... Jeg bruger måske ikke den identifier i parameteren...
Avatar billede magoo20000 Nybegynder
06. oktober 2002 - 15:30 #21
I p340Tank burde du have:
public void setTripTæller(){   
    bForbrug.setTripTæller(){ 

Og i p340Bil:
public void setBenzinForbrug(){ 
        tTæller.setTripTæller();
    } 
Nu kan du sætte, hvor mange L benzin, der skal på dyret og hvad triptælleren er(=antal kørte km).

I din main-metode skal du nun kun oprette et objekt af typen P340BTank.
P340BTank tank = new P340BTank():
getTankNiveau() burde nu returnere noget korrekt.
Som det tidligere blev nævnt, er det en god ide at vælge en anden primitiv datatype til dine attributter.
En float er langt mere fornuftig, end en int.
Hvis du vælger det, så husk at ret Integer.parseInt(read1) til Integet.parseFloat(read1)...
Avatar billede magoo20000 Nybegynder
06. oktober 2002 - 15:32 #22
Husk at angive, at det skal være en int.
Altså (int kmPrL), som parameter!
Avatar billede magoo20000 Nybegynder
06. oktober 2002 - 15:33 #23
Det var vist mig, der glemte det.
Jeg sidder ved en pc uden SDK'en installeret, så jeg kan ikke teste det :-((, så det er frit efter hovedet!
Avatar billede Slettet bruger
06. oktober 2002 - 15:45 #24
...Er det dit hoved eller er det et sprog kursus som har bidraget til den beherskelse ;-)
Avatar billede Slettet bruger
06. oktober 2002 - 15:46 #25
(ps. jeg mener at jeg er i tvivl ved blot en "hello world" syntax)
Avatar billede magoo20000 Nybegynder
06. oktober 2002 - 15:48 #26
Hehe! Øvelse gør mester!
Man lærer kun at kode ved at øve sig!
Jeg har lige hentet den nødvendig software her, hvor jeg sidder, så hæng lige på..Har fundet et par fejl mere!
Avatar billede magoo20000 Nybegynder
06. oktober 2002 - 16:15 #27
Ok så er den løst!
Avatar billede magoo20000 Nybegynder
06. oktober 2002 - 16:17 #28
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

class Main{
       
      public static void main(String[] args){
          P340BTank benzinTank = new P340BTank();
           
      InputStreamReader read = new InputStreamReader(System.in);
      BufferedReader console = new BufferedReader(read);
        {
       
        try   
            {
   
            System.out.println("Hvor meget benzin fylder du på? ");
            String read1 = console.readLine();
            float liter = Float.parseFloat(read1);
            benzinTank.påfyldning(liter);
                       
            System.out.println("Hvor har du kørt? ");
            String read2 = console.readLine();
            float km = Float.parseFloat(read2);
            benzinTank.setTripTæller(km);
            System.out.println("\nSå er der  " + benzinTank.getTankNiveau() + " liter benzin tilbage i tanken");
            }       
       
            catch(IOException e)
            {    System.out.println(e);
                System.exit(1);
            }
       
        }
           
    }
}

public class P340BTank{
           
    private float niveau;
    private float påfyldning;
    private float forbrug;
    private P340Bil bForbrug = null;
   
public P340BTank(){
    bForbrug = new P340Bil();
    niveau = 0;
}

public void påfyldning(float påfyldning){
    niveau = påfyldning + niveau;
}
   
public void tømning(){
    niveau = 0;
}

public float getTankNiveau(){   
    return niveau-bForbrug.getBenzinForbrug();
     

public void setTripTæller(float antalkm){ 
  bForbrug.setTripTaeller(antalkm);


}

public class P340Bil{ 
   
    private float forbrug;
    private float kmPrL;
    private P340Taeller tTaeller=null;
   
    public P340Bil(){ 
      tTaeller = new P340Taeller();
      forbrug = 0;
      kmPrL();
    }
 
    public void kmPrL(){   
        kmPrL = 10;
    }   
     
    public void setForbrug(float forbrug){
    this.forbrug=forbrug;
    }

    public float getForbrug(){
    return forbrug;
    }

    public void setKmPrL(float kmPrL){
    this.kmPrL=kmPrL;
    }

    public float getKmPrL(float kmPrL){
    return kmPrL;
    }
 
    public float getBenzinForbrug(){ 
      return (tTaeller.getTripTaeller()/kmPrL);
       
    } 
    public void setTripTaeller(float antalKm){ 
        tTaeller.setTripTaeller(antalKm);
    } 

}

public class P340Taeller{           

    private float tripTaeller;
   

    public P340Taeller(){
    tripTaeller = 0;
    }

    public void setTripTaeller(float tripTaeller){
    this.tripTaeller += tripTaeller;
    }
     
    public float getTripTaeller(){
      return tripTaeller;
}
}
Avatar billede Slettet bruger
06. oktober 2002 - 16:44 #29
Så sætter jeg mig i en krog og læser på det jeg ikke forstår og skulle blive klogere af det (lidt af et paradoks).

Mange tak for hjælpen begge to.
Magoo20000 får pointene. Men føler du dig forbigået blackadder så sig til.
Avatar billede magoo20000 Nybegynder
06. oktober 2002 - 16:54 #30
Mange tak! Bare sig til en anden gang!
Og god fornøjelse her i Javaverdenen!
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