2014-01-06 51 views
0

首先,在我的代碼中對瑞典語抱歉。這是一個學校任務,他們是用瑞典語寫的......我希望代碼是可以理解的。沒有包含Polylinje類型的實例可以在範圍內訪問

我得到這個錯誤在我的代碼中的三行,並不知道爲什麼。

no enclosing instance of the type Polylinje is accessible in scope 

我的代碼是:

public class PolylinjeIterator { 
    private int aktuell = -1; 

    public PolylinjeIterator(){ 
     if (Polylinje.this.horn.length > 0) // ERROR HERE! 
      aktuell = 0; 
    } 

    public boolean finnsHorn(){ 
     return aktuell != -1; 
    } 

    public Punkt horn() 
      throws java.util.NoSuchElementException{ 
     if (!this.finnsHorn()) 
      throw new java.util.NoSuchElementException ( 
        "slut av iterationen"); 

     Punkt horn = Polylinje.this.horn[aktuell]; // ERROR HERE! 

     return horn; 
      } 

    public void gaFram(){ 
     if (aktuell >= 0 && 
       aktuell < Polylinje.this.horn.length - 1) // ERROR HERE! 
      aktuell++; 
     else 
      aktuell = -1; 
    } 
} 

內Polylinje.java的代碼如下所示:

import java.util.Arrays; 
public class Polylinje { 

// Instansvariabler 

// En tom Polylinje 
private Punkt[] horn; 

// Polylinjens färg 
private String farg = "svart"; 

// Polylinjens bredd 
private int bredd = 1; 



// Konstruktorer 

// Polylinje skapar en Polylinje utan hörn 
public Polylinje() { 
    this.horn = new Punkt[0]; 
} 

// Polylinje skapar en Polylinje med argument 
public Polylinje (Punkt[] horn, String farg, int bredd) 
{ 
    this.horn = new Punkt[horn.length]; 
    for (int i = 0; i < horn.length; i++) 
     this.horn[i] = new Punkt (horn[i]); 

    this.farg = farg; 
    this.bredd = bredd; 
} 
public Polylinje (Punkt[] horn) 
{ 
    this.horn = new Punkt[horn.length]; 
    for (int i = 0; i < horn.length; i++) 
     this.horn[i] = new Punkt (horn[i]); 
} 



// Konvertorer 

// 
public String toString() { 
    String s = ""; 
    s = "{"+Arrays.toString(horn)+", "+farg+", "+bredd+"}"; 
    return s; 
} 



// Inspektorer 

// getHorn returnerar hörnen i form av Punkt-array. 
public Punkt[] getHorn() {return horn;} 

// getFarg returnerar färgen i form av en String. 
public String getFarg() {return farg;} 

// getBredd returnerar bredden i form av en integer. 
public int getBredd() {return bredd;} 



// Mutatorer 

// setFarg låter dig ange färgen på en Polylinje. 
public void setFarg (String farg) {this.farg = farg;} 

// setBredd låter dig ange bredden på en Polylinje. 
public void setBredd (int bredd) {this.bredd = bredd;} 

// langd beräknar längden på en Polylinje. 
public double langd() { 

    double langd = 0; 
    double d = 0; 

    for (int i = 0; i < (horn.length-1); i++){ 
     d = horn[i].avstand (horn[i+1]); 
     langd += d; 
    } 

    return langd; 
} 

// laggTill lägger till en linje i slutet av Polylinjen 
public void laggTill (Punkt horn) { 
    Punkt[] h = new Punkt[this.horn.length + 1]; 
    int i = 0; 
    for (i = 0; i < this.horn.length; i++) 
     h[i] = this.horn[i]; 
    h[i] = new Punkt (horn); 
    this.horn = h; 
} 

// laggTillFramfor lägger till en linje framför en vald linje 
public void laggTillFramfor (Punkt horn, String hornNamn) 
{ 
    int pos = -1; 

    for(int i = 0; i < this.horn.length; i++){ 
     if(this.horn[i].namn == hornNamn){ 
     pos = i; 
     break; 
     } 
    } 

    Punkt[] h = new Punkt[this.horn.length + 1]; 

    for (int j = 0; j < pos; j++) 
     h[j] = this.horn[j]; 


    for (int k = pos+1; k < h.length; k++) 
     h[k] = this.horn[k-1]; 

    h[pos] = new Punkt (horn); 

    this.horn = h; 
} 

// 
public void taBort (String hornNamn) {} 
} 
+0

附註:如果聲明是惡魔的工作,則不需要大括號。 –

回答

0

在Java中,您使用短語Foo.this來引用匿名類中的封閉類型。有關更多詳細信息,請參閱this question

你不是在這種情況下。

根據你最新的問題編輯,你只需要調用getters。例如:

if (Polylinje.this.horn.length > 0) // ERROR HERE! 

應該變成:

public class PolylinjeIterator { 
    private int aktuell = -1; 
    private final Polylinje polylinje; 

    public PolylinjeIterator (Polylinje polylinje){ 
     this.polylinje = polylinje; 
     if (polylinje.getHorn().length > 0) 
      aktuell = 0; 
    } 
+0

這似乎工作,但在Polylinje.java中給了一些「建議」(日食中的黃色燈泡)。儘管一切似乎工作,所以我希望這是正確的:) – morxy49

+0

@ user3165913出於興趣,有什麼建議? –

+0

nope,當我這樣做時,我毀了一些其他地方的代碼:/ 推薦說:「靜態字段Polylinje.horn應靜態加入」 – morxy49

0

如果你要引用的Polylinje一個實例內PolylinjeIterator您需要將PolylinjeIterator的實例傳遞給構造函數:

public PolylinjeIterator (Polylinje polylinjeInstance){ 
     if (polylinjeInstance.horn().length > 0) // Assuming Punkt has a length member and horn is a method in Polylinje 
      aktuell = 0; 
    } 

如果要在PolylinjeIterator類中的不同位置使用Polylinje,請創建一個類成員,並在構造函數中將給定實例分配給此成員。然後使用PolylinjeIterator類中的成員。

使用Polylinje.this沒有意義,因爲Classes沒有自己的成員作爲實例。該實例是您創建的具體實體類,因此無論何時您參考this不需要類名稱

+0

另外'Polylinje.this.horn.length> 0'不會被編譯。 'horn()'是一種方法,但用作'field'。 – christopher

+0

謝謝!但現在我在相同的行上出現了新的錯誤。 「喇叭不能解決或不是一個領域」 – morxy49

+0

你似乎錯過了周圍的類被稱爲「Polylinjeterator」而不是「Polylinje」的事實。 –

0

代碼中的表達式Polylinje.this.horn無效。如果需要在類Polylinje的實例中訪問horn屬性,則需要使此實例可以通過類PolylinjeIterator訪問,可能是通過爲其提供類Polylinje的屬性並將其初始化爲PolylinjeIterator的構造函數。

也出現使用horn標識符以三種不同方式:作爲PolylinjeIterator類的方法,如在本方法和可能作爲Polylinje類的屬性的局部變量;這可能是您應該嘗試刪除的混淆之一。

0

Polylinje.this

if (polylinje.getHorn().length > 0) 

,如果你在你的類您在構造函數中插入字段名爲polylinje,例如這將工作意味着您正在訪問Polylinje類中的「this」實例和/或Polylinje的內部類中,這對您有用在非靜態內部類(成員類)/匿名內部類Polylinje中使用。一種解決方案是通過訪問器在PolylinjeIterator中創建Polylinje的實例,並通過訪問器訪問horn或在Polylinje中執行所需的操作,或者在PolylinjeIterator中執行所需的操作或者聲明horn

相關問題