2011-08-03 39 views
0

我得到以下錯誤消息試圖調試我的代碼:幻影法?

Not able to submit breakpoint MethodBreakpoint [tarea11.Main].contarCapas '(Ljava/util/TreeSet<tarea11/punto>;)I', reason: Method 'contarCapas' with signature '(Ljava/util/TreeSet<tarea11/punto>;)I' does not exist in class tarea11.Main. 

現在我意識到,contarCapas方法不工作,就好像它甚至沒有宣佈。

package tarea11; 


import java.io.File; 
import java.io.IOException; 
import java.util.Comparator; 
import java.util.HashSet; 
import java.util.Scanner; 
import java.util.TreeSet; 

/** 
* 
* @author darwin 
*/ 

class punto{ 
    int x; 
    int y; 
    boolean usado; 




    public punto(int x, int y) { 
     this.x = x; 
     this.y = y; 
     this.usado=false; 

    } 


    static double pendiente (punto p1, punto p2){ 
     double M = (p2.y - p1.y)/(p2.x - p1.x); 
     return M; 

    } 

    @Override 
    public boolean equals (Object o1){ 

     if (o1 instanceof punto){ 

      punto p1 = (punto)o1; 
      if (p1.x==this.x&& p1.y==this.y){ 

       return true; 
      } 
       return false; 

     } 

     else 

      return false; 

    } 

    @Override 
    public int hashCode() { 

     String string = this.x+" "+this.y; 
     return string.hashCode(); 

    } 

} 

class PointComparator implements Comparator { 

    public int compare(Object o1, Object o2){ 

     punto p1 = (punto)o1; 
     punto p2 = (punto)o2; 

     if (p1.y>p2.y){ 
      return 1; 
     } 
     if(p2.y > p1.y) 
     { 
      return -1; 
     } 

     else{ 

      if(p1.x>p2.x){ 
       return 1; 
      } 
      return -1; 
     } 


    } 

} 

public class Main { 


    int contarCapas (TreeSet<punto> puntosOrdenados){ 

     System.out.println("asdasdf"); 
     int numeroDeCapas=0; 

     HashSet <punto> puntosUsados = new HashSet<punto>(); 

     while (!puntosOrdenados.isEmpty()){ 

      punto p= puntosOrdenados.pollFirst(); 

      puntosUsados.add(p); 

      //chequear contra todos los demas para hallar minArco 
      double minArco=99999999; 
      punto minPunto = new punto(-2001,-2001); 
      double arco=0; 
      for (punto siguiente: puntosOrdenados){ 

       if(siguiente.equals(p)){ 
        continue; 
       } 


       arco=Math.atan2(p.y - siguiente.y, p.x - siguiente.x); 
       if (arco< minArco){ 
        minArco=arco; 
        minPunto = siguiente; 
       } 

      } 

      if (puntosUsados.contains(minPunto)){ 

       numeroDeCapas= numeroDeCapas+1; 

      } 

     } 

     return numeroDeCapas; 

    } 



    public static void main(String[] args) { 

     PointComparator pointComparator = new PointComparator(); 

     System.out.println(Math.atan2(-1.0, 1.0)); 
     //System.out.println(Math.acos(cont)) 
     Scanner s = new Scanner(System.in); 

     try{ 
     s = new Scanner(new File("entrada.txt")); 
     } catch(IOException e){} 
     int N,x,y; 

     N = s.nextInt(); 

     while(N!=0){ 

      punto cebolla[] = new punto[N]; 

      TreeSet <punto> puntosOrdenados = new TreeSet <punto>(pointComparator); 

      for(int i=0;i<N;i++){ 
       x=s.nextInt(); y=s.nextInt(); 
       cebolla[i]=new punto(x,y); //borrar? 
       puntosOrdenados.add(new punto(x,y)); 
      } 

      Main m = new Main(); 
      int cont= m.contarCapas(puntosOrdenados); 
      System.out.println(cont); 

      if(cont%2==0){ 
       System.out.println("NO"); 
      }else{ 
       System.out.println("SI"); 
      } 
      N = s.nextInt(); 
     } 
    } 


    } 

即自語println內部contarCapas在不打印:

版本1:

package tarea11; 


import java.io.File; 
import java.io.IOException; 
import java.util.Comparator; 
import java.util.HashSet; 
import java.util.Scanner; 
import java.util.TreeSet; 

/** 
* 
* @author darwin 
*/ 

class punto{ 
    int x; 
    int y; 
    boolean usado; 


    public punto(int x, int y) { 
     this.x = x; 
     this.y = y; 
     this.usado=false; 

    } 


    static double pendiente (punto p1, punto p2){ 
     double M = (p2.y - p1.y)/(p2.x - p1.x); 
     return M; 

    } 

    @Override 
    public boolean equals (Object o1){ 

     if (o1 instanceof punto){ 

      punto p1 = (punto)o1; 
      if (p1.x==this.x&& p1.y==this.y){ 

       return true; 
      } 
       return false; 

     } 

     else 

      return false; 

    } 

    @Override 
    public int hashCode() { 

     String string = this.x+" "+this.y; 
     return string.hashCode(); 

    } 

} 

class PointComparator implements Comparator { 

    public int compare(Object o1, Object o2){ 

     punto p1 = (punto)o1; 
     punto p2 = (punto)o2; 

     if (p1.y>p2.y){ 
      return 1; 
     } 
     if(p2.y > p1.y) 
     { 
      return -1; 
     } 

     else{ 

      if(p1.x>p2.x){ 
       return 1; 
      } 
      return -1; 
     } 


    } 

} 

public class Main { 


    static int contarCapas (TreeSet<punto> puntosOrdenados){ 

     int numeroDeCapas=0; 

     HashSet <punto> puntosUsados = new HashSet<punto>(); 

     while (!puntosOrdenados.isEmpty()){ 

      punto p= puntosOrdenados.pollFirst(); 

      puntosUsados.add(p); 

      //chequear contra todos los demas para hallar minArco 
      double minArco=99999999; 
      punto minPunto = new punto(-2001,-2001); 
      double arco=0; 
      for (punto siguiente: puntosOrdenados){ 

       if(siguiente.equals(p)){ 
        continue; 
       } 

       arco=Math.atan2(p.y - siguiente.y, p.x - siguiente.x); 
       if (arco< minArco){ 
        minArco=arco; 
        minPunto = siguiente; 
       } 

      } 

      if (puntosUsados.contains(minPunto)){ 

       numeroDeCapas= numeroDeCapas+1; 

      } 

     } 

     return numeroDeCapas; 

    } 


    public static void main(String[] args) { 

     PointComparator pointComparator = new PointComparator(); 

     System.out.println(Math.atan2(-1.0, 1.0)); 
     //System.out.println(Math.acos(cont)) 
     Scanner s = new Scanner(System.in); 

     try{ 
     s = new Scanner(new File("entrada.txt")); 
     } catch(IOException e){} 
     int N,x,y; 

     N = s.nextInt(); 

     while(N!=0){ 

      punto cebolla[] = new punto[N]; 

      TreeSet <punto> puntosOrdenados = new TreeSet <punto>(pointComparator); 

      for(int i=0;i<N;i++){ 
       x=s.nextInt(); y=s.nextInt(); 
       cebolla[i]=new punto(x,y); //borrar? 
       puntosOrdenados.add(new punto(x,y)); 
      } 


      int cont= contarCapas(puntosOrdenados); 
      System.out.println(cont); 

      if(cont%2==0){ 
       System.out.println("NO"); 
      }else{ 
       System.out.println("SI"); 
      } 
      N = s.nextInt(); 
     } 
    } 


    } 

版本2。該代碼沒有輸入其呼叫。爲什麼?

+0

您可以嘗試在主函數啓動時開始調試。 – tanyehzheng

+0

你沒有努力提供[自我包含正確的簡短示例](http://pscode.org/sscce.html)。請把你的問題降到最低限度。 – Bohemian

+0

@ tanyehzheng:是的,我試着從主要方法調試,它從那裏工作正常,它只是不承認調用int cont = m.contarCapas(puntosOrdenados);就好像它不在那裏。 – andandandand

回答

2

這就是我期望看到的源代碼是否與正在運行的字節碼不同步。嘗試一個乾淨的代碼版本,或者你也可以使用javap反彙編字節碼,看看它看起來是否與源相匹配,這取決於你的情況。

+0

是的,我嘗試清理並重新編譯代碼幾次。沒有工作。我把它帶到另一臺機器上,它與Netbeans(6.9.1)的版本相同,它的確如此: -/ – andandandand

+0

它做了什麼?它以同樣的方式工作或打破了? –

+0

經過2次清潔和重建後,它在新機器上工作: - / – andandandand