2014-01-06 49 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

相关问题