Avatar billede Peter Praktikant
11. maj 2002 - 18:12 Der er 4 kommentarer og
1 løsning

Modificere et objekt fra en anden klasse.

Hej, jeg har et problem jeg gerne vil have løst.
jeg har en klasse med denne metode:

public boolean modify(Point p){
  double x = p.getX();
  double y = p.getY();
  double xFinal = Math.pow(x, 2);
  double yFinal = Math.pow(y, 2);

  p.setX(xFinal);
  p.setY(yFinal);
 
  return (xFinal > 2);
}

Jeg kalder denne metode fra en anden klasse hvor jeg har oprettet et objekt convert.
Her ser koden således ud:

public Point p = new Point(2,2);
boolean mod = convert.modify(p);

Her ville jeg så gerne have at Point p nu havde værdien (4,4), men dette er ikke tilfældet, faktisk får den nogle gange værdien NaN som jo ikke er meningen.
Hvordan kan man løse problemet?
Avatar billede smok Nybegynder
11. maj 2002 - 18:42 #1
Det hele ser umiddelbart rigtigt ud ... men det er det jo ikke :-)

Jeg har lige hurtigt strikket noget alla dit sammen og det virker fint .. her er 2 klasser ... og ingen problemer .. kig på dem .. håber det hjælper lidt ..

public class Point
{
    private double x;
    private double y;
   
    public Point( double x, double y )
    {
        setX(x);
        setY(y);
    }
   
    public void setX( double x )
    {
        this.x = x;
    }
   
    public void setY( double y )
    {
        this.y = y;
    }
   
    public double getX()
    {
        return x;
    }
   
    public double getY()
    {
        return y;
    }
}


public class TestPoint
{
    public TestPoint()
    {
        Point p = new Point( 2, 2 );
        boolean mod = modify( p );
       
        System.out.println( mod );
    }

    public boolean modify( Point p )
    {
        double x = p.getX();
        double y = p.getY();
       
        double xFinal = Math.pow( x, 2 );
        double yFinal = Math.pow( y, 2 );
       
        p.setX( xFinal );
        p.setY( yFinal );
       
        System.out.println( p.getX() );
       
        return( xFinal > 2 );
    }
   
    public static void main( String arg[] )
    {
        new TestPoint();
    }
}
Avatar billede soelvpil Nybegynder
12. maj 2002 - 08:45 #2
Er Point-klassen en du selv har lavet, eller en du har "lånt"?

Prøv at printe ud, hvilke værdier din getX og getY giver.
Avatar billede Peter Praktikant
12. maj 2002 - 13:05 #3
smok > hvordan kan det være mit ikke virker, jeg synes ikke jeg kan se nogle umiddelbare forskelle. Jeg kan nemlig også godt få dit til at virke, men ikke mit.
soelvpil > jeg har selv lavet Point-klassen og den giver NaN, men ikke hele tiden, den er lidt inkonsistent.
Avatar billede Peter Praktikant
12. maj 2002 - 15:13 #4
jeg har fundet fejlen. Nogle gange returnere modify værdien NaN da der et andet sted bliver divideret med 0. Problemet er jo så med den kode, at Point p bliver ændret til at have en værdi NaN. Men da p er hentet fra et array bliver det jo ændret der og næste gang jeg kalder det giver det værdien NaN for x-koordinaten og returnerer derfor NaN når det kommer ind i modify. Så problemet er nu hvordan jeg henter en kopi af p første gang jeg henter den frem fra arrayet frem for at hente p og dermed ændre på p i arrayet. Giver det nogen mening det jeg lige har skrevet?
Avatar billede Peter Praktikant
12. maj 2002 - 17:20 #5
da smok ikke har lagt et svar og soelvpil har lagt en kommentar som et svar snupper jeg selv pointene. Tak for hjælpen.
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