2013-03-09 3 views
0

여기에서 새 프로그래머 :다른 메소드에서 인스턴스 호출하기

위의 메서드에서 클래스 Album의 인스턴스를 호출 할 수 있도록 도움이 필요합니다.

public static void main(String[] args) { 
     Album a1 = new Album("Fede Finn og Funnyboys", "Glade Aber"); 

     Ar1.addAlbum(a1); 

    } 

    public void runner1() { 
     Ar1.sortList(); 
     System.out.println(""); 
     toTxt(1); 
     Ar1.removeAlbum(Album.**a1**); 

나는이 실수를 얻을 : A1을 확인할 수 없습니다 또는 필드되지 않습니다 수 있습니다.

쉬운 문제는 - 당신이 그것을 당신이 언급 한 이상 당신이 오류가 발생합니다 외부 주를 사용하려고, 그래서 만약 내가 알고, 죄송합니다 :) A1의

들으

+3

범위와 가시성에 대해 읽어보십시오. – Polygnome

+0

'a1'이라는 이름의 'Album'에 정적 속성을 호출하고 있습니다. 'Album'에'a1'이라는 정적 속성이 있습니까?'main() '에'a1'라고 불리는'Album' 타입의 변수가 있습니다. 그러나 그것은 같은 것이 아니에요. 그리고 main()은 runner1()을 호출하지 않으므로, 여기서 어떤 일이 일어나고 있는지 잘 모르겠습니다. – David

+0

그럼 설명해 보도록하겠습니다. "public void runner1()을 삭제하면 아래의 메소드가 주에서 실행되므로 실수가 없습니다. 문제는 2 개의 다른 메소드 - 계열이 실행되기를 원하기 때문에 내 메인에서 호출해야합니다. – user2151525

답변

0

a1 범위는 내부에 코드 데모입니다 본관. 즉, 기본 방법 인 경우에만 a1을 사용할 수 있습니다. 주요 외부에서 사용할 수 있으려면, 당신은 당신이 그것을 사용하려고하고있는 메서드에 매개 변수로 전달해야합니다. 당신이 당신의 runner1 방법에 a1을 사용하려는 경우 (가정 runner1이 Album하는 방법입니다 그래서 당신이 runner1 내부 앨범 객체 a1에 runner1 전화 후 this

EDIT 당신이 키워드로 해당 개체를 참조 할 수 있습니다

public static void main(String[] args) { 
     Album a1 = new Album("Fede Finn og Funnyboys", "Glade Aber"); 
     a1.runner1();//you need to call runner1 on the Album object 

     Ar1.addAlbum(a1); 

    } 

: 아이디어는 동일 클래스, 당신은 같은 것을 할 필요가 여기, 당신은 당신의 메인 메소드에서 당신의 앨범 객체를 만들고, 메소드를 호출합니다. 당신의 전화가 있습니다. 이 메서드 내에서 this으로 앨범 개체를 참조하십시오. 예를 들어, 방법은 다음 runner1를 호출하는 경우 :

가 주 방법에서 그래서
public void runner1() { 
     Ar1.sortList(); 
     System.out.println(""); 
     toTxt(1); 
     Ar1.removeAlbum(this);//refer to the Album object you want to remove by this 
} 

, 때마다 당신이 앨범 개체의 runner1 메소드를 호출,이 객체는 this으로 대해 참조되며 사용자는 키워드를 사용할 수 있습니다 방법은 removeAlbum입니다.

그래서에서 주 당신은 a1, a2, a3라는 세 개의 앨범 객체를 가지고 있고,이 순서로 runner1 메서드를 호출하는 경우 : 당신이 그것을 참조하기 때문에

a1.runner1(); 
a2.runner1(); 
a3.runner1(); 

그런 다음 각각의 호출 메서드를 호출하는 개체를 제거됩니다 그 방법에서 this.

희망이

+0

각각의 새로운 러닝 메서드를 사용하지 않고 다른 러너 메서드에서 a1을 호출 할 수 있도록이 작업을 수행 할 수 있습니까? – user2151525

+0

다른 러너에서 a1을 호출하면 무엇을 의미합니까? 당신은하려고합니다. –

+0

이 이미지를 보시오 (내 코드 샷) htt p : //i.imgur.com/REQ5DQh.png 일련의 메소드가 시작되는 맨 아래 부분 (Ar1.sortList()); - 나는 그것만의 방법으로 그것을 원한다. 그래서 나는 그것들 중 다수를 차이로 만들 수있다. – user2151525

0

범위 주 안에 있습니다.

Album a1 = new Album("Fede Finn og Funnyboys", "Glade Aber"); 
public static void main(String[] args) { 
    Ar1.addAlbum(a1); 

} 
+0

어떻게 변경합니까? – user2151525

+0

@ user2151525 메인 외부에서 앨범의 인스턴스를 만듭니다 –

+0

a1은 main 내부에서 사용 하시겠습니까? –

0

주요 방법은 diffrent 방법은이 방법

당신이 그렇게 원하는 경우에 제기 클래스를 호출은`t이며, 여기

class Albumdemo{ 
public static void main(String[] args) { 
    Album a1 = new Album("Fede Finn og Funnyboys", "Glade Aber"); 
    Albumdemo Ar1 = new Albumdemo(); 
    Ar1.addAlbum(a1); 

} 

public void runner1(Album a1) { 
    Ar1.sortList(); 
    System.out.println(""); 
    toTxt(1); 
    Ar1.removeAlbum(Album.**a1**); 
} 

} 
0

A1 로컬 주요 방법으로 범위가 문제 해결합니다. 변수를 멤버로 대신 지정하면 변수를 참조 할 수 있습니다.

public class Album { 
    private static ArrayList<Album> Ar1 = new ArrayList<Album>(); // I assume you have one of these here? 
    private static Album a1 = new Album("Fede Finn og Funnyboys", "Glade Aber"); 

    public static void main(String[] args) { 
     Ar1.addAlbum(a1); 
     new Album().runner1(); 
    } 

    public void runner1() { 
     Ar1.sortList(); 
     System.out.println(""); 
     toTxt(1); 
     Ar1.removeAlbum(a1); 
    } 
} 
관련 문제