Java 幻影法?
尝试调试代码时,我收到以下错误消息:Java 幻影法?,java,debugging,netbeans,Java,Debugging,Netbeans,尝试调试代码时,我收到以下错误消息: 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 cl
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.
无法提交断点方法断点[tarea11.Main].contarCapas'(Ljava/util/TreeSet;)I',原因:类tarea11.Main中不存在带有签名的方法'contarCapas'(Ljava/util/TreeSet;)I'。
现在我意识到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();
}
}
}
package tarea11;
导入java.io.File;
导入java.io.IOException;
导入java.util.Comparator;
导入java.util.HashSet;
导入java.util.Scanner;
导入java.util.TreeSet;
/**
*
*@作者达尔文
*/
普托班{
int x;
int-y;
布尔usado;
公共punto(整数x,整数y){
这个.x=x;
这个。y=y;
这个.usado=false;
}
静态双垂度(punto p1,punto p2){
双M=(p2.y-p1.y)/(p2.x-p1.x);
返回M;
}
@凌驾
公共布尔等于(对象o1){
if(punto的o1实例){
punto p1=(punto)o1;
if(p1.x==this.x&&p1.y==this.y){
返回true;
}
返回false;
}
其他的
返回false;
}
@凌驾
公共int hashCode(){
字符串字符串=this.x+“”+this.y;
返回string.hashCode();
}
}
类PointComparator实现Comparator{
公共整数比较(对象o1、对象o2){
punto p1=(punto)o1;
punto p2=(punto)o2;
如果(p1.y>p2.y){
返回1;
}
如果(p2.y>p1.y)
{
返回-1;
}
否则{
如果(p1.x>p2.x){
返回1;
}
返回-1;
}
}
}
公共班机{
静态int contarCapas(树集puntosOrdenados){
int numeroDeCapas=0;
HashSet puntosausados=新HashSet();
而(!puntosOrdenados.isEmpty()){
punto p=puntosOrdenados.pollFirst();
puntosausados.add(p);
//在米纳尔科的大厅里有一张支票
双minArco=9999999;
punto minPunto=新punto(-2001,-2001);
双arco=0;
用于(punto siguiente:punto Ordenados){
if(siguiente.等于(p)){
继续;
}
arco=数学atan2(p.y-siguiente.y,p.x-siguiente.x);
如果(arcop1.y)
{
返回-1;
}
否则{
如果(p1.x>p2.x){
返回1;
}
返回-1;
}
}
}
公共班机{
int contarCapas(TreeSet puntosOrdenados){
System.out.println(“asdasdf”);
int numeroDeCapas=0;
HashSet puntosausados=新HashSet();
而(!puntosOrdenados.isEmpty()){
punto p=puntosOrdenados.pollFirst();
puntosausados.add(p);
//在米纳尔科的大厅里有一张支票
双minArco=9999999;
punto minPunto=新punto(-2001,-2001);
双arco=0;
用于(punto siguiente:punto Ordenados){
if(siguiente.等于(p)){
继续;
}
arco=数学atan2(p.y-siguiente.y,p.x-siguiente.x);
如果(arco 对于(int i=0;i这就是我希望看到的源代码是否与正在运行的字节码不同步。请尝试干净地构建代码,或者也可以根据您的情况反汇编字节码,看看它是否与源代码匹配。您可以尝试在主函数开始时开始调试。您有请尽量减少你的问题。@tanyehzheng:是的,我试过从main方法中调试,但效果很好,只是没有确认int cont=m.contarCapas(puntosOrdenados)的调用;就好像它不在那里。当你进入这一行时发生了什么?顺便问一下,也许你应该试试@Ryan solution.hmm,我们应该添加tarea标签吗?是的,我尝试了几次清理和重新构建代码。都没用。我把它带到另一台具有相同版本的Netbeans(6.9.1)的机器上它确实做到了:-/它在新机器上工作了2次清洁a
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();
}
}
}