2017-12-18 3 views
-3

Also zuerst habe ich diese Klasse:Wie behebe ich "Methode kann nicht aufgelöst werden"?

public float getPixel(int height, int width) 
{ 
    return data[height][width]; 
} 

public void setPixel(float value, int height, int width) 
{ 
    if (value > getMax()) 
    value = getMax(); 
    if (value < 0) 
    value = 0; 
    data[height][width] = value; 
} 

private Image(String magicNumber, int height, int width, float max) { 
    this.magicNumber = magicNumber; 
    this.width = width; 
    this.height = height; 
    this.max = max; 
    data = new float[height][width]; 
} 
... 
public Image clone() 
{ 
    Image clone = new Image(getMagicNumber(), getHeight(), getWidth(), getMax()); 
    for (int i = 0; i < getHeight(); i++) 
    { 
    for (int j = 0; j < getWidth(); j++) 
    { 
     clone.setPixel(getPixel(i, j), i, j); 
    } 
    } 
    return clone; 
} 

Und dann diese Klasse:

public class Filter { 

    public Filter() { 

    } 

    public Image linearFilter(Image image, float[][] kernel) 
    { 
     Image filtered = image.clone(); 
     for (int i = 0; i < getHeight(); i++) 
     { /* cannot resolve getHeight*/ 
      ... 
     } 
     return filtered; 
    } 
} 

Ich habe zwei Fragen:

1) Warum benötige ich keine Instanz erstellen der Klasse Bild. Hier kann ich bereits filtered.setPixels verwenden ...

2) Wie behebe ich das Problem mit "kann Methode nicht auflösen"?

+3

Methoden nicht aufrufen, die nicht existieren. Vielleicht wollen Sie 'image.getHeight (...)' nennen? Schwer zu sagen, da wir nicht wissen, was dieser Code tun soll. Ist das Bild ein 'java.awt.Image'? –

+0

(1) Sie _do_ erstellen eine Instanz von 'Image'. Was denkst du 'image.clone()'? (2) Wenn Sie eine Methode aufrufen, müssen Sie angeben, auf welchem ​​Objekt Sie sie aufrufen. Hier möchten Sie wahrscheinlich dem Ratschlag von Herrn Hovercraft folgen und 'image.getHeight()' schreiben. –

+0

@DawoodibnKareem, eine Klarstellung: Wenn es die 'java.awt.Image' Schnittstelle ist, gibt es keine' getHeight() 'Methode. Stattdessen müsste er die Methode 'getHeight (ImageObserver observer)' verwenden. –

Antwort

-1

Ich kann nicht wirklich von Ihrem Beitrag erzählen, weil der erste Ausschnitt, den Sie gepostet haben, nicht eine ganze Klasse zu sein scheint, sondern eher ein Teil davon. Ich nehme an, Sie haben eine Image-Klasse, und diese Image-Klasse hat eine Methode namens getHeight().

Innerhalb der for-Schleife Zustand for (int i = 0; i < getHeight(); i++), werden Sie wahrscheinlich wollen getHeight() zu filtered.getHeight() ändern, weil getHeight() eine Methode innerhalb der Klasse Image ist, und filtered ist (vermutlich) vom Typ Image.

+0

Ja, ich habe eine 'Image' Klasse und diese Klasse hat die' getHeight() 'Methode (das war der erste Ausschnitt). Ich don 't Ich verstehe ganz genau, wie wir eine Instanz in der Klasse 'Filter' in der 'linearFilter'-Methode erzeugen. Mit anderen Worten: Was macht' Image filtered = image.clone()'? Wie ist das Erstellen einer Instanz? Ich bin es gewohnt do 'Image filtered = new Image()' zum Erstellen einer Instanz ... Ich verstehe nicht ... – vmw8

+0

@ vmw8 Haben Sie sich die Definition von 'clone' angesehen? – csmckelvey

Verwandte Themen