2012-10-03 5 views
0

그래서 저는 어떤 종류의 자바에서 멍청한 놈으로 안드로이드 용 앱을 만들려고합니다. 일부 오류가 발생했지만 해결할 수 없습니다. 누가 그 문제가 무엇인지 찾는 것을 도울 수 있습니까?android 용 java 앱의 오류

package com.example.w; 

//import com.example.jkhgvcxz.R; 

import views.DrawView; 
import android.app.Activity; 
import android.graphics.Color; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MotionEvent; 
import android.view.View; 
import android.widget.RelativeLayout; 



public class MainActivity extends Activity { 

    Ponto2D patual = new Ponto2D(); 
    int contador = 0; 

    DrawView drawView; 
    View view2; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     RelativeLayout rl = (RelativeLayout) findViewById(R.id.rl); 

     RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(500, 500); 
     params.leftMargin = 50; 
     params.topMargin = 50; 

     drawView = new DrawView(this); 
     drawView.setBackgroundColor(Color.WHITE); 

      rl.addView(drawView, params); 


     drawView.setOnTouchListener(new View.OnTouchListener() { 
      // @Override 
      public boolean onTouch(View v, MotionEvent event) { 

       Ponto2D patual = new Ponto2D((int)event.getX(), (int)event.getY());    Reta r1 = new Reta (inicio, fim); 

       DrawView.ar[contador] =rl[]; 

       inicio.X = \.X; 
       inicio.Y = fim.Y; 


       contador++; 


       if (event.getAction()== MotionEvent.ACTION_DOWN) 
       { 
       drawView.a=7; 
       drawView.antigox=drawView.X; 
       drawView.antigoy=drawView.Y; 
       drawView.X=event.getX(); 
       drawView.Y=event.getY(); 
       //drawView.draw(); 
       drawView.desenhar_quadrado();} 

        return true; 
      } 
     }); 

    } 
    public void btn(View v) 
    { 
      drawView.desenhar_quadrado(); 
    } 
    public void btn_verde(View v) 
    { 
      drawView.paint.setColor(Color.GREEN); 
    } 
    public void btn_vermelho(View v) 
    { 
     drawView.paint.setColor(Color.RED); 
    } 
    public void btn_preto(View v) 
    { 
     drawView.paint.setColor(Color.BLACK); 
    } 
    public void btn_azul(View v) 
    { 
     drawView.paint.setColor(Color.BLUE); 
    } 

    public void btn_amarelo(View v) 
    { 
     drawView.paint.setColor(Color.YELLOW); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 


} 

내 RETA 클래스 :

package com.example.w; 

public class Reta { 
    Ponto2D inicio; 
    Ponto2D fim; 
    int cor; 

    public Reta(Ponto2D p1, Ponto2D p2){ 

     inicio = new Ponto2D(p1.x, p1.y); 
     fim = new Ponto2D(p2.x, p2.y); 

    } 
} 

내 DrawView 클래스 :

package views; 

import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.view.View; 

import com.example.w.Reta; 

public class DrawView extends View { 
    public Paint paint = new Paint(); 

    Reta ar[] = new Reta [10]; 
    public int a; 
    public float antigox=0; 
    public float antigoy=0; 
    public float X=0; 
    public float Y=0; 

    public DrawView(Context context) { 
     super(context); 
     paint.setColor(Color.BLACK); 
     a=0; 
    } 

    public void desenhar_quadrado() 
    { 
     invalidate(); 
    } 
    @Override 
    public void onDraw(Canvas canvas) { 
     for(int j=0; j<10; j++){ 
      drawLine(ar[j].inicio.x, ar[j].inicio.y); 
     } 
    } 
} 

그리고 내 Ponto2D 클래스 :

package com.example.w; 

public class Ponto2D { 

    int x; 
    int y; 

    public Ponto2D() 
    { 
     x = -1; 
     y = -1; 
    } 

    public Ponto2D(int x, int y) 
    { 
     this(); 
     this.x = x; 
     this.y = y; 
    } 

} 
다음

내 mainActivity입니다 0

지금은 내가 얻을 라인 34 (44-50)

DrawView.java에서 또한
- The constructor Ponto2D(float, float) is undefined 
- fim cannot be resolved to a variable 
- inicio cannot be resolved to a variable 
- line 47: Syntax error on token "[", Expression expected after this token 
- Cannot refer to a non-final variable rl inside an inner class defined in a different method 
- The field DrawView.ar is not visible 
- The type of the expression must be an array type but it resolved to RelativeLayout 
- fim cannot be resolved to a variable - inicio cannot be resolved to a variable. 

가지고 : 당신이 정의 결코이

public class MainActivity extends Activity { 

Ponto2D patual = new Ponto2D(); <---- here 
//... 
} 

에서

- The field Reta.inicio is not visible, 
- The method drawLine(int, int) is undefined for the type DrawView 
- The field Reta.inicio is not visible 
- The field Ponto2D.x is not visible. 
+3

당신은 당신이 무엇을 얻을 오류 설명 경우 도움이 될 ... – assylias

+0

행 18 : 생성자 Ponto2D는() undefined- 와치 포인트입니다 : MainActivity [액세스 및 수정] \t - patual –

+1

가 이해가 안 스페인어를 배우지 만, 어떤 이유로 든 Rect와 Point2D 클래스를 재발 명하고 있습니다. 그래서 문제를 일으키는 클래스 중 하나라고 생각합니다. 예를 들어 코드에 사용중인 Ponto2D() 생성자가 표시되지 않습니다. – Shark

답변

3

봐 클래스의 Ponto2D() 생성자.

public Ponto2D() 
{ 
    x = -1; 
    y = -1; 
} 

public Ponto2D(int x, int y) 
{ 
    this(); 
    this.x = x; 
    this.y = y; 
} 

제 2 추가

public float X=0; 
    public float Y=0; 

을하고 나중에는이

Ponto2D patual = new Ponto2D(event.getX(), event.getY()); 

하는 정말해야 할

Ponto2D patual = new Ponto2D((int)event.getX(), (int)event.getY()); 

는 또는 당신은 당신의 Ponto2D 클래스는이

public class Ponto2D 
{ 

float x; 
float y; 

public Ponto2D() 
{ 
    x=-1.0; 
    y=-1.0; 
} 

public Ponto2D(float x, float y) 
{ 
    this(); 
    this.x = x; 
    this.y = y; 
} 
} //end of class 

3 부처럼 보이도록 재 :

좋아, 내가 지금 각 오류를 설명 할 것이다.

  • 생성자 Ponto2D (float, float)는 정의되지 않았습니다.이 문제를 다루었습니다.
  • fim을 변수로 해석 할 수 없습니다. MainActivity 클래스에서 'fim'을 정의하지 않았습니다. 정의 된 값을 사용해야합니다. Reta 수업에서 '핌'을 사용하고 싶었던 것 같습니까? 이 경우 ...

    Reta r1 = new Reta (inicio, fim);

    Reta r1 = new Reta (new Ponto2D(), new Ponto2D()); 
    

    또는

    Reta r1 = new Reta (new Ponto2D(<your values>), new Ponto2D(<values again>)); 
    
    • 크리에이터

    변경이는 이전과 같은 변수 같은 일에 확인할 수 없습니다.

  • 라인 47 : 아들을 컴파일하지 않습니다이 토큰

     DrawView.ar[contador] =rl[]; 
    
         inicio.X = \.X; 
         inicio.Y = fim.Y; 
    

이 후 예상 토큰 "[", 식에 구문 오류가 있습니다. 나는 당신이 무슨 말을 하려는지 모르겠지만 난 당신이이 일에 의견 수집 제안 : D를

  • 이 다른 방법에 정의 된 내부 클래스 내부가 아닌 최종 변수 RL을 참조 할 수 없습니다

    이것은 흥미 롭습니다. 이는 내부 클래스의 외부 클래스에 정의 된 rl을 대상으로 할 수 없음을 의미합니다. 그래서 그것을 해결하기 위해 단지 때때로 당신은 그냥 가끔 당신이 당신의 변수 일부의 최종 사본이 필요, 최종 추가, 때로는 해결하기 위해 까다로운 일이 될 수있는이

    final RelativeLayout rl = (RelativeLayout) findViewById(R.id.rl); 
    

    이 오류이

    RelativeLayout rl = (RelativeLayout) findViewById(R.id.rl); 
    

    를 교환 다른 때는 코드를 실제로 재구성해야합니다. 다행히도, 이번에는 마지막으로 추가 할 것입니다.

    • 이 필드 DrawView.ar이 표시되지 않습니다

    은 DrawView 클래스를 열고 그래서이

    public class DrawView extends View { 
    public Paint paint = new Paint(); 
    
    Reta ar[] = new Reta [10]; //offending line 
    public int a; 
    //... 
    

    를 참조하거나

    public class DrawView extends View 
    { 
        public Paint paint = new Paint(); 
    
        public Reta ar[] = new Reta [10]; 
        //... 
    } 
    

    같이 해당 필드를 공개하거나 생성 getters/setters.

    • 식의 유형

      배열 유형이어야하지만,이 하나가 자동적으로 사라집니다 당신이 하나 그리고 앞서의 의견을 수집하면
      을 RelativeLayout의 결심.)

    • Reta.inicio가 보이지 필드, 이 자명 지금 쯤은 ...

      공용 클래스 RETA { 공공 Ponto2D 크리에이터를, 내가 엔지니어 해요, 날 믿어; public Ponto2D fim; public int cor; // ...

    • 필드 Reta.inicio }는 필드 Ponto2D.x가 보이지

    • 보이지 않는다.

    참조하십시오. 따라서 getters 및 setters를 사용하고 다른 클래스의 클래스 필드에 직접 액세스하지 마십시오.

    봅니다처럼 만들려면이

    public class Ponto2D 
    { 
        private int x; //2d plane shouldn't use floating coordinates. 
        private int y; 
    
        Ponto2D() { }; //ctor does nothing. 
    
        public Ponto2D(int x, int y) 
        { 
         this(); 
         this.x = x; 
         this.y = y; 
        } 
    
        public int getX() { return x; } 
        public int getY() { return y; } 
    } 
    
    public class Reta 
    { 
        private Ponto2D inicio; 
        private Ponto2D fim; 
        private int cor; 
    
        Reta() 
        { 
         fin = new Ponta2D(); //might cause an error because it's not public 
         inicio = new Ponta2D(-1, -1); //this should be ok 
        } 
    
        public Reta(Ponto2D p1, Ponto2D p2) 
        { 
    

    // this.inicio = 새로운 Ponto2D (p1.getX(), p1.getY());// 이것은 정말로 말도 안돼 // this.fim = new Ponto2D (p2.getX(), p2.getY()); this.inicio = p1; this.fim = p2; // 새로운 객체 대신에 이것들을 사용할 수 있습니다. 새로운 물건을 원하지 않는 한. } }

    이 코드 스타일은 이러한 실수를 피하는 방법을 알려줍니다.

    마지막 부분 :이 일에 당신을 도울 것입니다

    , 혹시 당신이 가지고이 ...에서 살고있는 오류를 만들고 싶어 당신이 당신의 자신에 파악해야합니다 나머지 학생 수준의 초보자 프로그래밍, 자바 또는 안드로이드에 실제로 묶이지 않음. 사용자는 정의되지 않은 참조를 수정하는 데 시간을 낭비하지 않으므로 아무도 자신을 해결할 방법을 알 필요가 없습니다. 심지어 코드를 읽지도 않음 (심지어 코드를 읽지도 않았 음을 보여줍니다)

    Can not 그래서 여기에 당신이 한 원하든의 비 정적 필드 DrawView.ar

    확인에 대한 정적 참조를 만들 :

    그래서
    public class DrawView extends View { 
    public Paint paint = new Paint(); 
    
    Reta ar[] = new Reta [10]; 
    public int a; 
    

    DrawView 클래스는 [] 아칸소라는 이름의 회원이있다.

    일반적으로이 같은 액세스 것 :

    DrawView dv = new DrawView(); 
    System.out.println(Arrays.toString(dv.ar)); // dv.ar, not DrawView.ar 
    

    당신이 DrawView.ar로 호출 할 때 즉 그것은 참조 할 수 없습니다 "라는 이유는이 클래스 의 모든 인스턴스에 대해 동일 의미 비 정적 변수 ar을 정적 인 방식으로 사용합니다. "

    '정적'인 경우 해당 클래스의 모든 인스턴스에서 공통/동일/공통입니다.

    공용 클래스 DrawView보기를 확장 할 그렇다면 { 공공 페인트 페인트 = 새 페인트();

    static Reta ar[] = new Reta [10]; 
    public int a; 
    

    모든 DrawView 인스턴스는 같은 RETA 배열을해야합니다 :) 당신이 progbably 그것의 자신의 사각형 하나 이상의 drawview를 원하기 때문에, 그것은 개인이어야한다. 비공개 인 경우 정적 (Class.someMember)으로 타겟팅 할 수는 없지만 인스턴스 (classInstance.someMember) 또는 ((새 클래스) .someMember)

    을 의미합니다. Reta ar []은 비공개 또는 공개이어야합니다.

    public boolean onTouch(View v, MotionEvent event) { 
    
          Ponto2D patual = new Ponto2D((int)event.getX(), (int)event.getY()); 
          Reta r1 = new Reta (inicio, fim); 
    
          //DrawView.ar[contador] =rl[]; //offending line 
          //it should be 
          //drawView.ar = something; but thats also wrong because you cannot refer to a non-final variable drawView in a inner-class blahblah so here's what you do 
          ((DrawView)v).ar[contador] = rl; //or whatever you want it to be 
    

    , 당신은 추가 질문이있는 경우)

    는, 책을 기록했다. Google을 사용해보십시오. Google은 귀하의 오류 :) 그 모든 것들은 정말 일반적이며 수천 번 덮여있다. MainActivity에서

  • +0

    내가 Ponto2D에서 그렇게한다면, 나는 "Ponto2D (int, int) 타입의 중복 메소드 Ponto2D"를 얻는다. 'package com.example.w; 공용 클래스 Ponto2D { \t \t int x; \t int y; \t \t public Ponto2D (int a, int b) { \t \t x = a; \t \ty = b; \t} \t \t 공개 Ponto2D() { \t \t X = -1; \ty = -1; \t} \t 공개 Ponto2D (INT의 X, Y의 INT) \t { \t이(); \t this.x = x; \t this.y = y; \t} } 미안하지만 나는 "좋아요"코드로 포맷 할 수 없습니다. –

    +0

    이전 생성자를 삭제하거나 Ponto2D() 하나만 복사해야합니다. 컴파일러에서 두 가지 중복 메서드가 있고 그럴 수 있음을 알려 줬습니다. 오류를 읽지 않습니까? : D는 기본 ctor에 의존하지 않으므로 Ponto2D (int a, int b)를 제거합니다. – Shark

    +0

    하하하. 미안. 괜찮아. 고마워. 고마워.지금은이 (44-50) - 생성자 Ponto2D (부동, 플로트가) 정의되지 - 크리에이터 내가 얻을 변수 라인 47에 해결 될 수없는 -을 넘어서 변수 로 해석 할 수 없습니다 - 토큰에 구문 오류 "[",이 토큰 다음에 표현식이 필요합니다. - 다른 \t 메서드에 정의 된 내부 클래스 내부의 최종 변수가 아닌 변수를 참조 할 수 없습니다. - DrawView.ar 필드가 표시되지 않습니다. - 표현식 유형은 배열 유형이지만 해결되었습니다. \t RelativeLayout 그리고 49와 50에서 얻을 수 있습니다 : - fim을 변수로 확인할 수 없습니다. - inicio를 변수로 확인할 수 없습니다. –